在PHP從數組中刪除,我如何做到這一點:疊代在PHP數組,但添加/時迭代
$test = array(1,2,3,4);
$i=0;
While (!empty($test)) {
//do something with $test[i];
//remove $test[$i];
unset($test[$i]);
}
感謝
在PHP從數組中刪除,我如何做到這一點:疊代在PHP數組,但添加/時迭代
$test = array(1,2,3,4);
$i=0;
While (!empty($test)) {
//do something with $test[i];
//remove $test[$i];
unset($test[$i]);
}
感謝
有幾種方法可以在迭代時修改陣列:
您可以使用array_pop
或array_shift
這取決於您要在
while($val = array_pop($arr))
-or-
while($val = array_shift($arr))
這確實有這種形式的catch元素的順序,這將結束任何 falsy價值listed in the type comparison table,array()
,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()
有一個隱藏的優點,那就是如果在檢查時變量未定義,它可以抑制錯誤。
在寫得很好的代碼™這不是一個問題,然而編寫良好的代碼™不是自然而然地發生在野外,所以你應該特別小心以防萬一。
也許你的意思是:
$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
}
(更正記錄和應用) – jbd
除了指針從最後開始,這個工作很好嗎?即,如果它回顯出它顯示的值:4321.我需要它去1234.首先顛倒數組? – jbd
這段代碼有許多問題。如果數組包含「0」,「false」,「null」,「」「或'array()'會發生什麼?事情會打破。 – zzzzBov