迭代在php中的数组,但在迭代期间添加到/从数组中删除

时间:2011-09-01 03:13:54

标签: php arrays

在PHP中,我该怎么做:

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

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

  //do something with $test[i];

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

}

由于

2 个答案:

答案 0 :(得分:10)

在迭代数组时,有几种方法可以修改数组:

您可以使用array_poparray_shift,具体取决于您希望元素的顺序

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

这确实有这种形式的捕获,它将以任何虚假值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()有一个隐藏的优点,即如果在检查时未定义变量,它会抑制错误。

在精心编写的代码中,这不是一个问题,但编写良好的代码™不会在野外自然发生,所以你应该特别小心,以防万一。

答案 1 :(得分: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
}