Array walk function in PHP - Time & Space Complexity
We want to understand how the time taken by the array walk function changes as the array gets bigger.
Specifically, we ask: How does the number of steps grow when the array size grows?
Analyze the time complexity of the following code snippet.
$array = [1, 2, 3, 4, 5];
array_walk($array, function(&$value) {
$value *= 2;
});
print_r($array);
This code doubles each value in the array by walking through every element once.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The function visits each element of the array once.
- How many times: Exactly once per element, so as many times as the array length.
As the array gets bigger, the function takes longer because it must visit each new element.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 visits |
| 100 | 100 visits |
| 1000 | 1000 visits |
Pattern observation: The number of steps grows directly with the number of elements.
Time Complexity: O(n)
This means the time to complete grows in a straight line with the size of the array.
[X] Wrong: "The array_walk function runs in constant time no matter the array size."
[OK] Correct: Because array_walk must visit each element to apply the function, the time depends on how many elements there are.
Knowing how array functions scale helps you write efficient code and explain your choices clearly in interviews.
What if we replaced array_walk with a nested loop that calls array_walk inside another loop? How would the time complexity change?
Practice
array_walk do?Solution
Step 1: Understand the purpose of array_walk
The functionarray_walkis designed to apply a callback function to each element of an array.Step 2: Compare with other array functions
Sorting, merging, or removing duplicates are done by other functions likesort,array_merge, orarray_unique.Final Answer:
It applies a user-defined function to every element of an array. -> Option AQuick Check:
array_walk = apply function to each element [OK]
- Confusing array_walk with sorting functions
- Thinking it merges arrays
- Assuming it removes duplicates
array_walk with a callback function named modify on an array $arr?Solution
Step 1: Recall array_walk syntax
The correct syntax isarray_walk(array, callback), where callback is a string with the function name.Step 2: Check the options
Only array_walk($arr, 'modify'); matches the correct order and uses quotes around the callback function name.Final Answer:
array_walk($arr, 'modify'); -> Option DQuick Check:
array_walk(array, 'function') syntax [OK]
- Swapping the order of parameters
- Omitting quotes around callback name
- Passing callback without quotes
$numbers = [1, 2, 3];
array_walk($numbers, function(&$value) {
$value *= 2;
});
print_r($numbers);Solution
Step 1: Understand the callback function
The callback multiplies each value by 2, and the value is passed by reference (&$value), so changes affect the original array.Step 2: Apply changes to each element
1*2=2, 2*2=4, 3*2=6, so the array becomes [2, 4, 6].Final Answer:
Array ( [0] => 2 [1] => 4 [2] => 6 ) -> Option AQuick Check:
Reference callback doubles values [OK]
- Not using & to modify original array
- Expecting original array unchanged
- Confusing output format
$arr = [1, 2, 3];
array_walk($arr, function($val) {
$val += 5;
});
print_r($arr);Solution
Step 1: Check how callback modifies array
The callback parameter$valis passed by value, so changes inside do not affect original array.Step 2: Correct usage for modification
Passing&$valby reference allows modifying the original array elements.Final Answer:
Callback function parameter should be passed by reference to modify array. -> Option CQuick Check:
Use & in callback to change array items [OK]
- Ignoring reference in callback parameter
- Thinking array_walk needs array by reference
- Believing anonymous functions are not allowed
$fruits = ['apple' => 2, 'banana' => 3, 'cherry' => 5];, how can you use array_walk to add 10 to each value only if the value is less than 4?Solution
Step 1: Identify condition and modification
We want to add 10 to values less than 4, so check$val < 4inside the callback.Step 2: Ensure modification affects original array
Pass$valby reference (&$val) to change original array values.Step 3: Verify options
array_walk($fruits, function(&$val) { if ($val < 4) $val += 10; }); correctly uses reference and condition. array_walk($fruits, function($val) { if ($val < 4) $val += 10; }); lacks reference, so no change. array_walk($fruits, function(&$val, $key) { if ($key < 4) $val += 10; }); checks key instead of value. array_walk($fruits, function(&$val, $key) { if ($val > 4) $val += 10; }); adds 10 when value is greater than 4, which is wrong.Final Answer:
array_walk($fruits, function(&$val) { if ($val < 4) $val += 10; }); -> Option BQuick Check:
Reference + condition on value < 4 [OK]
- Not passing value by reference
- Checking key instead of value
- Using wrong comparison operator
Ready to prove it?
Pass the test and this pattern moves unknown
