向foreach中的数组添加新索引

时间:2012-10-08 17:58:29

标签: php arrays foreach

所以,我有这个:

$abc = array('a','b','c');
foreach ($abc as $k => &$a) {
    echo $a;
    if ($k == 1)
        $abc[] = 'd';
}

正如预期的那样工作,遍历foreach 4次并给我:

abcd

但现在,当我有这个:

$myvar = $this->someModel->return_an_array_as_result(); // returns array([0] => array('a' => 'b'))

foreach ($myvar as $myvar_key => &$mv){
    $myvar[] = array('e' => 'f');
    var_dump($myvar);
    if ($myvar_key == 5) die;
}

foreach只运行一次。

有关重置内部指针时foreach如何工作的任何想法?

2 个答案:

答案 0 :(得分:1)

那是因为foreach实际上正在处理数组的副本。如果您计划在迭代时修改数组,请使用传统的for循环。

有关详细信息,请参阅foreach上的PHP文档。此外,如果您希望在迭代时修改元素,可以&$reference它们(有关此内容的更多信息也可在foreach文档中找到)。

答案 1 :(得分:1)

我明白你的意思,你可以使用ArrayObject,当你仍然在数组中循环时,它会允许附加到数组

$myvar = new ArrayObject(array('a' => 'b'));
$x = 0;
foreach ( $myvar as $myvar_key => $mv ) {
    $myvar->append(array('e' => 'f'));
    if (($x >= 4))
        break;
    $x ++;
}
var_dump($myvar);

输出

object(ArrayObject)[1]
  public 'a' => string 'b' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)