2011-09-01 30 views
3

在PHP從數組中刪除,我如何做到這一點:疊代在PHP數組,但添加/時迭代

$test = array(1,2,3,4); 

$i=0; 
While (!empty($test)) { 

    //do something with $test[i]; 

    //remove $test[$i]; 
    unset($test[$i]); 

} 

感謝

回答

9

有幾種方法可以在迭代時修改陣列:

您可以使用array_poparray_shift這取決於您要在

while($val = array_pop($arr)) 
-or- 
while($val = array_shift($arr)) 

這確實有這種形式的catch元素的順序,這將結束任何 falsy價值listed in the type comparison tablearray()false""0"0"null值將所有結束while

典型地,這被減輕與

while(($val = array_pop($arr)) !== null) 

應使用嚴格類型比較作爲null == false和其他錯誤值。同樣的問題將是,它會停止迭代如果陣列中的一個值實際上是null

通過循環訪問數組的一個更安全的方法是測試它不是空:

while($arr) 
//while(count($arr)) 
//while(!empty($arr)) 
{ 
    $val = array_pop($arr); 

    //for forward iteration 
    //$val = array_shift($arr); 
} 

這是真的簡單empty()if()檢查相反。 while循環中的!empty()有一個隱藏的優點,那就是如果在檢查時變量未定義,它可以抑制錯誤。

在寫得很好的代碼™這不是一個問題,然而編寫良好的代碼™不是自然而然地發生在野外,所以你應該特別小心以防萬一。

7

也許你的意思是:

$test = array(1,2,3,4); 

while (!empty($test)) { 
    //do something with $test[0]; 

    //remove $test[0]; 
    unset($test[0]); 
} 

這將有效地彈出陣列的頭部,直到它爲空。

它可能會更有意義使用array_pop,從而牽引該數組中的最後一個元素:

while(!empty($test)){ 
    $value = array_pop($test); 
    // do work with $value 
} 

...或array_shift這將拉動從陣列前端:

while(!empty($test)){ 
    $value = array_shift($test); 
    // do work with $value 
} 
+0

(更正記錄和應用) – jbd

+0

除了指針從最後開始,這個工作很好嗎?即,如果它回顯出它顯示的值:4321.我需要它去1234.首先顛倒數組? – jbd

+0

這段代碼有許多問題。如果數組包含「0」,「false」,「null」,「」「或'array()'會發生什麼?事情會打破。 – zzzzBov