在循环中修改数组

时间:2010-03-17 16:03:49

标签: 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";
}

它会得到:

0 is a
1 is b
2 is c

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

3 个答案:

答案 0 :(得分:9)

来自PHP manual

  

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

答案 1 :(得分:1)


$arraya = array(a,b,c);
foreach($arraya as $key=>$value)
{
    if($value == b)
    {
        $d = 'd';
        array_push($arraya, $d);
        //print_r($arraya);    //$arraya now becomes array(a,b,c,d)
    }
    print_r($arraya);
    echo $key.' is '.$value."\n";
}

您将需要逐个打印整个数组而不是单个元素。 只有在打印$ arraya时才会得到结果
如果$ arraya已经在其中,那么就可以轻松打印出来了。

答案 2 :(得分:0)

这与以下声明中的else不会被执行的原因相同......

int a = 1;
if(a == 1){
   a = 0;
}
else{
   //print something;
}

你的foreach处理一个数组,因为它是由foreach子句评估的。