3

出于某种其他原因,array_reducePHP 中的函数只接受整数作为它的第三个参数。这第三个参数用作整个归约过程的起点:

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

欢迎任何解决方法...

4

3 回答 3

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');
于 2009-10-15T12:36:12.663 回答
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;
}
于 2009-10-15T12:26:00.793 回答
2

第三个参数是可选的

混合array_reduce ( 数组 $input , 回调 $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);

http://us2.php.net/manual/en/function.implode.php

于 2009-10-15T12:26:22.843 回答