对于some或other原因,PHP中的array_reduce
函数只接受整数作为第三个参数。第三个参数用作整个简化过程的起点:
function int_reduc($return, $extra) {
return $return + $extra;
}
$arr = array(10, 20, 30, 40);
echo array_reduce($arr, 'int_reduc', 0); //Will output 100, which is 0 + 10 + 20 + 30 + 40
function str_reduc($return, $extra) {
return $return .= ', ' . $extra;
}
$arr = array('Two', 'Three', 'Four');
echo array_reduce($arr, 'str_reduc', 'One'); //Will output 0, Two, Three, Four
在第二次调用中,'One'
被转换为它的整数值,即0,然后使用。
为什么PHP会这样做?
欢迎任何变通方法......
答案 0 :(得分:4)
如果您未传递$initial
值,则PHP假定它为NULL
并将NULL
传递给您的函数。因此,可行的解决方法是在代码中检查NULL
:
function wrapper($a, $b) {
if ($a === null) {
$a = "One";
}
return str_reduc($a, $b);
}
$arr = array('Two', 'Three', 'Four');
echo array_reduce($arr, 'wrapper');
答案 1 :(得分:2)
您可以编写自己的array_reduce函数。这是我快速打击的一个:
function my_array_reduce($input, $function, $initial=null) {
$reduced = ($initial===null) ? $initial : array_shift($input);
foreach($input as $i) {
$reduced = $function($reduced, $i);
}
return $reduced;
}
答案 2 :(得分:2)
第三个参数是可选的
混合 array_reduce(数组$输入,回调$ function [,int $ initial] )
请参阅http://us2.php.net/manual/en/function.array-reduce.php
只需使用:
$arr = array('One', 'Two', 'Three', 'Four');
echo array_reduce($arr, 'str_reduc');
如果您不想使用前导逗号,请使用
function str_reduc($return, $extra) {
if (empty($return))
return $extra;
return $return .= ', ' . $extra;
}
当然,如果您只想用逗号连接字符串,请使用implode
echo implode(", ", $arr);