Edit report at https://bugs.php.net/bug.php?id=64693&edit=1
ID: 64693 User updated by: jdoane at vlacs dot org Reported by: jdoane at vlacs dot org -Summary: Third argument passed to array_reduce turned into return value +Summary: Third argument ($initial) passed to array_reduce should be immutable. Status: Open Type: Bug Package: Arrays related Operating System: Ubuntu 12.04.02 LTS PHP Version: 5.3.24 Block user comment: N Private report: N New Comment: The order of the expected output is backwards, I apologize. It should be: ~$ php test.php stdClass Object ( [count] => 2 [maxlen] => 5 ) stdClass Object ( [count] => 0 [maxlen] => 0 ) Previous Comments: ------------------------------------------------------------------------ [2013-04-22 19:41:14] jdoane at vlacs dot org Description: ------------ When array_reduce is called with an object as the third argument, the variable passed to said third argument will turn into the result of the array_reduce() call. It feels like the object getting passed into array_reduce is not being cloned and is being modified in place. Since all objects are passed as a reference it changes the "$initial" variable in the scope where array_reduce was called. So either documentation needs to be updated that says that $initial gets set to the return value when it is an object or this shouldn't happen to begin with as it appears that $initial should remain immutable for the duration of the array_reduce() call. Test script: --------------- $array = (object)Array('foo', 'baraz'); $initial = (object)Array('count' => 0, 'maxlen' => 0); $output = array_reduce($array, function(&$d, $item) { if($d->maxlen < strlen($d)) { $d->maxlen = strlen($d); } $d->count++; return $d; } print_r($output); print_r($initial); Expected result: ---------------- ~$ php test.php stdClass Object ( [count] => 0 [maxlen] => 0 ) stdClass Object ( [count] => 2 [maxlen] => 5 ) Actual result: -------------- ~$ php test.php stdClass Object ( [count] => 2 [maxlen] => 5 ) stdClass Object ( [count] => 2 [maxlen] => 5 ) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64693&edit=1