Array slice and splice in PHP - Time & Space Complexity
When working with arrays, slicing and splicing are common ways to get or change parts of the array.
We want to understand how the time it takes grows as the array gets bigger.
Analyze the time complexity of the following code snippet.
$array = range(1, 1000);
$slice = array_slice($array, 100, 200);
array_splice($array, 300, 100, [0, 0, 0]);
This code takes a part of the array without changing it, then removes and replaces a section inside the original array.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Copying elements during slice and splice.
- How many times: For slice, it copies the requested part once. For splice, it removes and inserts elements, shifting others.
When the array size grows, the number of elements copied or shifted grows roughly with the size of the slice or splice.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Copy about 10 elements |
| 100 | Copy about 100 elements |
| 1000 | Copy about 100 elements for slice, and shifting elements for splice |
Pattern observation: The work grows roughly in direct proportion to the number of elements sliced or spliced.
Time Complexity: O(k + m)
This means the time depends on the size of the slice k and the number of elements affected by the splice m, not the whole array size.
[X] Wrong: "Slicing or splicing always takes time proportional to the entire array size."
[OK] Correct: Actually, these operations only work on the parts involved, so the time depends on how many elements you slice or splice, not the whole array.
Understanding how array slice and splice scale helps you write efficient code and explain your choices clearly in interviews.
"What if we splice at the start of a very large array instead of the middle? How would the time complexity change?"
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
