在循环中修改数组

You*_*ung 3 php

这是代码:

$arraya = array('a','b','c');
foreach($arraya as $key=>$value)
{
    if($value == 'b')
    {
        $arraya[] = 'd';
        //print_r($arraya);    //$arraya now becomes array('a','b','c','d')
    }
    echo $key.' is '.$value."\n";
}
Run Code Online (Sandbox Code Playgroud)

它会得到:

0 is a
1 is b
2 is c
Run Code Online (Sandbox Code Playgroud)

我想知道为什么3 is d不出现?

And*_*y E 9

PHP手册:

注意:除非引用了数组,否则foreach将对指定数组的副本进行操作,而不是数组本身.foreach对数组指针有一些副作用.在foreach期间或之后不要依赖数组指针而不重置它.

  • +1换句话说:在'foreach`循环中不要尝试更改数组. (2认同)
  • @janmoesen:它必须是'foreach($ arraya as $ key =>&$ value)`.必须引用该值.但有了这个,你只能改变价值. (2认同)