2013-10-05 155 views
1

我傾向於發現,當使用foreach結構而不使用引用時,數組中的某些元素缺失。PHP foreach沒有引用缺失元素

$array = array(); 

/* ... */ 

$array[] = 1; 
$array[] = 2; 
$array[] = 3; 

/* ... */ 

print_r($array); /* print_r always shows all elements */ 

foreach ($array as $element) { /* missing elements */ } 
foreach ($array as &$element) { /* does a fine job */ } 

我在我的代碼中有三個獨立的事件。修復很簡單(添加&),但它聽起來像是PHP中或我的設置中的錯誤...

更多人遇到這種情況嗎?問題是什麼?

PHP 5.4.12


編輯

案例:

$a = array(); 
$a[] = 1; 
$a[] = 2; 
$a[] = 3; 

foreach ($a as &$e) 
{ 
    echo $e; 
} 

echo '<br>'; 

foreach ($a as $e) 
{ 
    echo $e; 
} 

輸出:

123 
122 
+4

我不這麼認爲人...你是否期待元素從1開始而不是0? –

+0

向我們展示目前在foreach中執行的內容是什麼? – bwoebi

+0

您能否創建一個顯示問題的確切示例? –

回答

0

恰恰印證。

<?php 
    $x[]=1; 
    $x[]=2; 
    $x[]=3; 
    $x[]=4; 
    foreach($x as $y) { 
    var_dump($y); 
    } 
?> 

INT(1)INT(2)INT(3)INT(4)

+0

我想出了怪物何時被轉載,請再試一次! –

+0

使用引用(&)將您的迭代器頂起來... –

0

看來,這個問題在PHP解決版本。 5.6.10。

我有8個元素的數組。這裏是var_dump:

array(8){[0] => string(18)「需要lname。」 [1] =>字符串(18)「fname是必需的。」 [2] =>字符串(18)「需要電子郵件。」 [3] =>字符串(22)「需要password1」。 [4] =>字符串(22)「需要密碼2」。 [5] =>字符串(44)「名字只能是字母和數字。」 [6] =>字符串(43)「姓氏只能是字母和數字。」 [7] =>串(22) 「無效電子郵件地址」}

我使用此代碼打印出數組:

的foreach($ _SESSION [ '錯誤']爲$錯誤){ 打印$錯誤。 「
\ n」; }

My MAMP localhost uses PHP ver。 5.6.10其結果是完美:爲必填

需要

」 L-NAME FNAME 電子郵件需要的是需要 密碼1需要 密碼2 名必須是字母和數字。 姓氏必須僅爲字母和數字 無效的電子郵件地址「

我的遠程服務器使用PHP ver。 5.3,在這種情況下,服務器僅打印第一個元素

「需要lname」。

當我改變代碼爲Taco建議(foreach($ _SESSION ['error']爲& $ error))ver。 5.3。也給了好的(和預期的)結果。