2009-10-15 27 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

相關問題