array_walk vs array_map vs foreach
arrays, foreach, php
Solution
`array_walk` doesn't look at what result function gives. Instead it passes callback a reference to item value. So your code for it to work needs to be
function walk_trim(&$value) {
$value = trim($value);
}
`foreach` doesn't store changed values itself either. Change it to
foreach ($input3 as &$in) {
$in = trim($in);
}
Read more about references.
Problem
I'm trying to compare these three but it seems only `array_map` works. ``` $input = array( ' hello ','whsdf ',' lve you',' '); $input2 = array( ' hello ','whsdf ',' lve you',' '); $input3 = array( ' hello ','whsdf ',' lve you',' '); $time_start = microtime(true); $input = array_map('trim',$input); $time_end = microtime(true); $time = $time_end - $time_start; echo "Did array_map in $time seconds<br>"; foreach($input as $in){ echo "'$in': ".strlen($in)."<br>"; } //////////////////////////////////////////////// $time_start = microtime(true); array_walk($input2,'trim'); $time_end = microtime(true); $time = $time_end - $time_start; echo "Did array_walk in $time seconds<br>"; foreach($input2 as $in){ echo "'$in': ".strlen($in)."<br>"; } //////////////////////////////////////////////// $time_start = microtime(true); foreach($input3 as $in){ $in = trim($in); } $time_end = microtime(true); $time = $time_end - $time_start; echo "Did foreach in $time seconds<br>"; foreach($input3 as $in){ echo "'$in': ".strlen($in)."<br>"; } ``` What Am I Doing Wrong? Here's the output: ``` Did array_map in 0.00018000602722168 seconds 'hello': 5 'whsdf': 5 'lve you': 7 '': 0 Did array_walk in 0.00014209747314453 seconds ' hello ': 10 'whsdf ': 41 ' lve you': 37 ' ': 30 Did foreach in 0.00012993812561035 seconds ' hello ': 10 'whsdf ': 41 ' lve you': 37 ' ': 30 ``` It's not trimming for `array_walk` and the `foreach` loop.