[英]iterate over array in php but add to / remove from array during iteration
在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值結束, array()
, false
, ""
, 0
, "0"
,並且null
值將全部結束while
循環
通常,這可以減輕
while( ( $val = array_pop( $arr ) ) !== null )
嚴格類型比較應該用作null == false
和其他falsey值。 同樣問題是,如果數組中的值實際為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
可能更有意義, 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.