2011-03-25 59 views
2

這裏代碼(在PHP 5.3.5和5.2.13執行):PHP數組未設置

$res = array(1, 2, 3); 

unset($res[0]); 

for($i = 0; $i < sizeof($res); $i++) 
{ 
    echo $res[$i] . '<br />'; 
} 

在結果我看到

<br />2<br /> 

爲什麼只有一個元件,和第一空?不能理解。當這樣做的:

print_r($res); 

參見:

Array ([1] => 2 [2] => 3) 

thanx的幫助!

回答

8

這是因爲你從$i = 0;開始而不是1,這是新的第一個索引。最後一個元素是缺少,因爲它的第二(以前三)因素,因爲規模已經下降到2。這應該得到你想要的結果之前停止:

foreach($res as $value) { 
    echo $value . '<br />'; 
} 
2

因爲經過unset的sizeof數組= 2

基本上使用error_reporting(E_ALL)進行開發,它會幫助你

+1

+1因爲提到打開error_reporting。 – MitMaro 2011-03-25 21:36:08

+0

當然使用,thanx! – swamprunner7 2011-03-25 21:43:43

1

這不是按預期方式工作,因爲當你取消設置時,所以sizeof()返回2.因此你循環0到小於2(aka 1)。

因此,這將只顯示在索引1的元素,因爲你在0

未設置元素的一個簡單的解決將是使用foreach循環:

foreach($res as $value){ 
    echo $value .'<br />'; 
} 
3

PHP不重新排列未設置的鍵。未設置的密鑰是12。在for循環中,i獲取01值。使用此片段,您應該初始化i1,這是數組的第一個鍵。提示1:使用foreach來遍歷數組。
提示2:不要使用別名。使用count instash的sizeof

+0

我不知道,tnanx! – swamprunner7 2011-03-25 21:44:21

1

它正在迭代2次,第一次通過它訪問索引0,你沒有設置,第二次訪問索引1,這是你看到的輸出。即使索引1 & 2只有兩個元素,您仍然從原始索引開始。