Array slice and splice help you take parts of an array or change it by adding or removing items.
Array slice and splice in PHP
<?php // Array slice syntax $sliced_array = array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false); // Array splice syntax $removed_elements = array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []); ?>
array_slice returns a new array and does not change the original array.
array_splice changes the original array by removing and optionally adding elements.
<?php // Example 1: Slice part of an array $fruits = ['apple', 'banana', 'cherry', 'date']; $sliced = array_slice($fruits, 1, 2); print_r($sliced);
<?php // Example 2: Slice with offset only $numbers = [10, 20, 30, 40]; $sliced = array_slice($numbers, 2); print_r($sliced);
<?php // Example 3: Splice to remove elements $colors = ['red', 'green', 'blue', 'yellow']; $removed = array_splice($colors, 1, 2); print_r($colors); print_r($removed);
<?php // Example 4: Splice to replace elements $letters = ['a', 'b', 'c', 'd']; array_splice($letters, 1, 2, ['x', 'y']); print_r($letters);
This program shows how array_slice returns a new part without changing the original array. Then it shows how array_splice removes some elements and adds new ones, changing the original array.
<?php // Create an array $animals = ['cat', 'dog', 'bird', 'fish', 'horse']; // Print original array echo "Original array:\n"; print_r($animals); // Use array_slice to get a part without changing original $sliced_animals = array_slice($animals, 1, 3); echo "\nSliced array (index 1 to 3):\n"; print_r($sliced_animals); echo "\nArray after slice (unchanged):\n"; print_r($animals); // Use array_splice to remove and replace elements $removed_animals = array_splice($animals, 2, 2, ['lion', 'tiger']); echo "\nRemoved elements by splice:\n"; print_r($removed_animals); echo "\nArray after splice (changed):\n"; print_r($animals); ?>
Time complexity: array_slice is O(n) where n is the length of the slice; array_splice is O(m) where m is the number of elements removed or added.
Space complexity: array_slice creates a new array, so it uses extra space; array_splice modifies in place, so uses less extra space.
Common mistake: Expecting array_splice to return the changed array. It returns the removed elements instead.
Use array_slice when you want a copy of part of the array without changing the original. Use array_splice when you want to change the original array by removing or adding items.
array_slice returns a new array with selected elements and does not change the original.
array_splice removes and/or adds elements in the original array and returns the removed elements.
Use slice to copy parts, splice to change the array.
Practice
array_slice and array_splice in PHP?Solution
Step 1: Understand
array_slicebehaviorarray_sliceextracts a portion of the array and returns it as a new array without changing the original array.Step 2: Understand
array_splicebehaviorarray_spliceremoves or replaces elements in the original array and returns the removed elements, thus modifying the original array.Final Answer:
array_slicereturns a new array without changing the original, whilearray_splicemodifies the original array. -> Option AQuick Check:
Slice copies, splice changes original [OK]
- Thinking both functions modify the original array
- Confusing which function returns a new array
- Assuming splice returns the modified array instead of removed elements
array_splice on array $arr?Solution
Step 1: Identify parameters of
The function signature isarray_splicearray_splice(array &$array, int $offset, int $length = ?). To remove 2 elements starting at index 1, offset = 1 and length = 2.Step 2: Match parameters to options
array_splice($arr, 1, 2); usesarray_splice($arr, 1, 2);which correctly removes 2 elements starting from index 1.Final Answer:
array_splice($arr, 1, 2); -> Option CQuick Check:
Offset 1, length 2 removes correct elements [OK]
- Swapping offset and length values
- Omitting length parameter and removing all after offset
- Using wrong index for offset
$arr = [10, 20, 30, 40, 50]; $result = array_slice($arr, 2, 2); print_r($result);
Solution
Step 1: Understand
It extracts elements starting at index 2, taking 2 elements fromarray_sliceparameters$arr.Step 2: Extract elements from the array
Index 2 is 30, next element is 40, so the slice is [30, 40].Final Answer:
[30, 40] -> Option AQuick Check:
Slice from index 2, length 2 = [30, 40] [OK]
- Confusing index start point
- Assuming original array is changed
- Mixing up array_slice with array_splice
$arr = [1, 2, 3, 4, 5]; array_splice($arr, 2, 2, [8, 9]); print_r($arr);
What is the output?
Solution
Step 1: Understand
The call removes 2 elements starting at index 2 (elements 3 and 4) and inserts [8, 9] at that position.array_splicewith replacementStep 2: Modify the original array accordingly
Original array: [1, 2, 3, 4, 5]
Remove elements at index 2 and 3: [3, 4]
Insert [8, 9] at index 2
Resulting array: [1, 2, 8, 9, 5]Final Answer:
[1, 2, 8, 9, 5] -> Option DQuick Check:
Splice replaces elements with new ones [OK]
- Expecting original array unchanged
- Forgetting splice removes elements before inserting
- Confusing splice insertion with append
$data = [5, 10, 15, 20, 25, 30]. You want to remove the middle two elements and insert 100 and 200 in their place, then get a new array with the last three elements without changing the original array. Which code snippet correctly does this?Solution
Step 1: Extract last three elements without changing original
Usingarray_slice($data, -3)copies last three elements [20, 25, 30] into$copywithout modifying$data.Step 2: Modify original array by replacing middle two elements
array_splice($data, 2, 2, [100, 200])removes elements at index 2 and 3 (15, 20) and inserts 100 and 200.Step 3: Print the copied array
Printing$copyshows the last three elements of the original array before modification.Final Answer:
$copy = array_slice($data, -3); array_splice($data, 2, 2, [100, 200]); print_r($copy); -> Option BQuick Check:
Slice first to copy, then splice to modify [OK]
- Using splice to copy array (modifies original)
- Modifying array before slicing (copy changes)
- Wrong slice parameters for last elements
Ready to prove it?
Pass the test and this pattern moves unknown
