2013-01-17 35 views
4

我學習PHP從O'Reilly Media公司的書 'PHP編程',我偶然發現了這一點:沒有O'reilly的犯了一個錯誤:array_reduce

function add_up ($running_total, $current_value) { 
    $running_total += $current_value * $current_value; 
    return $running_total; 
} 
$numbers = array(2, 3, 5, 7); 
$total = array_reduce($numbers, 'add_up'); 
echo $total; 

的array_reduce()線,使這些函數調用:

add_up(2,3) 
add_up(11,5) 
add_up(36,7) 
// $total is now 87 

但是,當我計算我得到85.我想應該這樣寫:

array_reduce()線使得這些函數調用:

add_up (0,2); 
add_up (4,3); 
add_up (13,5); 
add_up (38,7); 

由於可選值$ initial默認設置爲NULL

mixed array_reduce (array $input , callable $function [, mixed $initial = NULL ]) 

能有更多知識的人向我解釋,誰錯了,爲什麼?

+3

查看本書的勘誤頁。 –

+0

我手動計算此值時得到87。編輯:http://viper-7.com/CG6bZe –

+0

我的意思是,當從書中使用函數調用時,我得到了85,並在我的方式得到87 .. – boksa

回答

6

它已在errata(雖未確認)中報告。但既然你不是唯一注意到的人,那麼你很可能是對的。

{128} Section "Reducing an Array"; 
Reducing An Array - Example of function calls created by array_reduce(); 

The array reduce() line makes these function calls: 

add_up(2,3) 
add_up(13,5) 
add_up(38,7) 

The correct list of calls should be: 

add_up(0,2) // This line is missing in the book 
add_up(4,3) // This line is incorrect in the book 
add_up(13,5) 
add_up(38,7) 


[129] first example; 
the resulting calls of the second example of array_reduce() should be: 
add_up(11, 2) 
add_up(15, 3) 
add_up(24, 5) 
add_up(49, 7) 
+0

這不是勘誤表。這是一份未經證實的問題列表,尚未列入[勘誤列表](http://oreilly.com/catalog/errata.csp?isbn=9781565926103)。 –

+0

(我希望這最終能夠寫入勘誤列表,不過,因爲它看起來是正確的。) –

+0

@Lightness:好點,謝謝:) –

相關問題