2012-10-09 139 views
1

我試圖運行一個PHP腳本,查找所有可以被3或5整除的數字,將它們轉儲到數組中,並將所有值一起添加。但是,當我嘗試運行它時,會得到一個數字輸出(我不知道它是否正確)以及幾百個錯誤。而是先有自己:PHP未定義偏移錯誤重複

注意:未定義偏移:1 G:\計算機東西\ WampServer \瓦帕\ WWW \ findthreesandfives.php上線18

然後由1-3增量偏移數增加(隨機,我還沒有看到一種模式)。我無法弄清楚什麼是錯的。這裏是我的代碼:

<?php 
function loop($x) 
{ 
$a = array(); //array of values divisible by 3 or 5 
$l = 0; //length of the array 
$e = 0; //sum of all the values in the array 
for ($i=0; $i<=$x; $i++){ //this for loop creates the array 
    $n3=$i%3; 
    $n5=$i%5; 
    if($n3 === 0 || $n5 === 0){ 
     $a[$i]=$i; 
     $l++; 
    } 


} 
for ($v=0; $v<=$l; $v++){ //this loop adds each value of the array to the total value 
    $e=$e + $a[$v]; 
} 
return $e; 
} 
echo loop(1000); 
?> 

有人請幫助......

回答

4

在你的代碼的問題是以下行:

$a[$i]=$i; 

應該是:

$a[count($a)] = $i; 

這是因爲$i的值始終在增加,所以使用$i作爲指針將在數組指數中造成空白。 count($a)返回給定數組中的項目總數,這也恰好是下一個索引。

編輯: @pebbl建議使用$a[] = $i;作爲提供相同功能的更簡單的替代方案。

編輯2:解決後續問題,在註釋中描述的OP:

這個問題似乎是$l$a項目的數量更大。因此,在for循環中使用count($a)應該修復您的後續錯誤。

嘗試更換:

for ($v=0; $v<=$l; $v++){ 

有了:

for ($v=0; $v<=count($a); $v++){ 
+4

+1爲正確答案:)但是它更容易編寫'$ A [] = $ I;'在PHP,因爲PHP會處理增加您的索引。 – Pebbl

+0

好吧,那工作..除了現在它只是給這個錯誤(和更大的最終數字)注意:未定義的偏移量:468在G:\電腦東西\ WampServer \ wamp \ www \ findthreesandfives.php在線18 – NinJoel

+0

'$ a [] = $ i;'如果OP仍然想維護索引序列 - 沒有差距,則更安全 – codingbiz

2

我發現了同樣的問題,因爲@zsnow說。 $ a內有差距。 if條件允許間隔使分配跳過一些索引。您也可以使用這個

foreach ($a as $v){ //this loop adds each value of the array to the total value 
    $e=$e + $a[$v]; 
} 

實際上應該是

foreach ($a as $v){ //this loop adds each value of the array to the total value 
    $e=$e + $v; 
} 
+1

+ 1作爲另一個工作答案。 foreach構造處理這種奇妙的情況......但是留下一個這樣的缺乏索引的索引只會導致後面的問題。不好的做法,imo。 – anditpainsme

+0

好吧..我試過了,但現在它給出了相同的錯誤模式(在我嘗試了第一種解決方案之後),但它從偏移量468開始,這是最後一個錯誤流結束的位置。 – NinJoel