2011-09-29 104 views
0

我有一個:陣列降低PHP

$arr = array(321,0.4,0.8,1.2); 
$result = array_reduce($arr,create_function('$op1,$op2','return $op1-=$op2;')); 
echo $result; //the result should be 318.6, but i got -323.4 

請你告訴我,這有什麼錯呢?

+0

所以,我怎麼能知道檢查結果= 318.6? 謝謝 –

+3

你將用'$ arr = array(321,0.4,0.8,1.2)獲得結果'318.6'; ($ op1,$ op2','return $ op1 - = $ op2;'),$ arr [0] * 2); $ result = array_reduce($ arr,create_function('$ op1,$ op2','return $ op1 - = $ op2;') echo $ result;' – Shef

+0

$ arr = array(1,2,3,4,5,6); $ initial = array_shift($ arr); ($ op1,$ op2','return $ op1 = - $ op2;'),$ initial);} $ result = array_reduce($ arr,create_function('$ op1,$ op2','return $ op1 = - $ op2;'),$ initial); echo $ result; –

回答

6

array_reduce函數有3個參數。第三是$初始。

這是默認爲NULL。你也應該填寫這個。看看這裏:http://nl.php.net/array_reduce

如果可選最初是可用的,它會在 開始的過程中使用,或作爲最終結果的情況下,該陣列是 空。

+1

爲什麼要對此投票?這是答案。在第一個函數調用時它將是'null - = 321',這將導致'-321',然後在隨後的調用中它將是'-321 - = 0.4',... – Shef

0

的Try ...

array_reduce($arr, 
     create_function('$op1,$op2','print "$op1, $op2\n"; 
            return $op1-=$op2;')); 

,並都應該很清楚。

0

您正在使用了錯誤的方向array_reduce。數組中的第一項需要從數組中移出並用作初始值。

$arr = array(321,0.4,0.8,1.2); 
$initial = array_shift($arr); 
$result = array_reduce($arr, create_function('$op1,$op2','return $op1-=$op2;'), $initial); 
echo $result; 
+0

$ arr = array(1, 2,3,4,5,6); $ initial = array_shift($ arr); ($ op1,$ op2','return $ op1 = - $ op2;'),$ initial);} $ result = array_reduce($ arr,create_function('$ op1,$ op2','return $ op1 = - $ op2;'),$ initial); echo $ result; 我需要類似((((1-2)-3)-4)-5)-6 = -19,但上面的結果與我需要的不一樣,請請幫助我。 謝謝 –

+0

您的聲明中有錯誤。 $ op1 = - $ op2應該是$ op1 - = $ op2。 - =表示「左移,右減並保存到左邊」= - 僅意味着「從右到左保存負數」。 –

2

只是所有。減去元素的總和,但是從第一要素,第一:

echo array_shift($arr) - array_sum($arr); # 318.6