以下是代码:
$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
没有出现?
答案 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子句评估的。