PHP的变通方法';s数组_减少整数第三个参数

PHP的变通方法';s数组_减少整数第三个参数,php,array-reduce,Php,Array Reduce,出于某种原因,PHP中的函数只接受整数作为第三个参数。第三个参数用作整个还原过程的起点: 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_

出于某种原因,PHP中的函数只接受整数作为第三个参数。第三个参数用作整个还原过程的起点:

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会这样做


欢迎使用任何解决方法…

您可以编写自己的array\u 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;
}

第三个参数是可选的

mixedarray\u reduce(数组$input,回调$function[,int$initial])

只需使用:

$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;
}
当然,如果您只想用逗号连接字符串,请使用内爆

echo implode(", ", $arr);

请参见如果未传递
$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');

哎哟-如果不提供第三个参数,这可能无法按预期工作。请编写自己的函数。包装PHP公开的所有内容。这是不一致的。我想使用这个函数的原因在我的例子中不是很清楚。这很复杂,但我需要第三个参数。