2009-10-15 28 views
2

对于someother的原因,PHP中的array_reduce函数只接受整数,因为它是第三个参数。该第三参数被用作在整个还原过程的起点: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这样做!?

任何变通办法欢迎...

+2

编写您自己的函数。将PHP公开的所有内容都包裹起来这是不一致的地狱。 – 2009-10-15 12:28:40

+0

@lonut:悲伤但真实。 – 2009-10-15 12:32:51

回答

3

如果您未通过$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'); 
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; 
} 
+0

哎呀 - 如果您不提供第三个参数,则可能无法按预期工作。 – Joel 2009-10-15 12:27:49

+0

修正了这个问题。现在应该工作正常。 – Joel 2009-10-15 12:30:38

2

第三个参数是可选的

混合 array_reduce(数组$输入,回调$函数[摘要$初始]

参见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; 
} 
当然

,如果你想要做的是用逗号连接字符串,利用爆

echo implode(", ", $arr); 

请参阅http://us2.php.net/manual/en/function.implode.php

+0

在我的例子中,我想使用这个函数的reaon不是很清楚。这很复杂,但我需要第三个参数。 – Jrgns 2009-10-16 22:12:46

相关问题