簡體   English   中英

迭代在php中的數組,但在迭代期間添加到/從數組中刪除

[英]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_poparray_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM