php foreach数组问题

$array=array('1','1');
foreach($array as $k=>$v)
{
$v=200;
}
print_r($array);
这道题的答案是Array ( [0] => 1 [1] => 1 ) 为什么? 求解,如果你要回答是直接打印数组的话,那么:
$array=array('1','1');
foreach($array as $k=>$v)
{
$array[$v]=200;
}
print_r($array);的结果为什么又是Array ( [0] => 1 [1] => 200 ) 呢

1.
$array=array('1','1');
foreach($array as $k=>$v)
{
$v=200;
}
print_r($array);

在这段代码,foreach遍历给定的 array 数组。每次循环中,当前单元的值被赋给 $v,键名也会在每次循环中被赋给变量 $k。

这种赋值是一种 “拷贝” 赋值,也就是说,$v 是 array 数组中某个单元的副本,更进一步说,$v 与 array 数组中某个单元,除了值相同之外,没有其他的关系。因此, $v=200; 这句代码只是修改了 $v的值,而对array 数组没任何影响。

其实也就是编程语言中函数参数的“值传递”与“引用传递”的概念区别。

作为对比,以下的例子可能更易帮助你理解 值传递 与 引用传递 的区别:

$array=array('1','1');
foreach($array as $k=>&$v) //注意这句,$v前面多了个&
{
$v=200;
}
print_r($array);

运行结果: Array ( [0] => 200 [1] => 200 )

2.
$array=array('1','1');
foreach($array as $k=>$v)
{
$array[$v]=200;
}
print_r($array);的结果为什么又是Array ( [0] => 1 [1] => 200 ) 呢?

这个也很好理解,虽然你在foreach里遍历了数组,但你并没有用 $aray[$k] = 200 来进行赋值,而是用 $v ,

所以,当访问到第1个元素时,$v = '1',那么 $array[$v]=200 的执行,实际上也就是, $array['1']=200,也就是第2个元素被改成200。

当访问第2个元素时,还是 $v = '1',仍旧是 $array['1']=200。

所以 $array 的第2个元素被修改了2次,而第1个元素没修改过。

提示:在php语言里,数组下标从0开始计数,跟c语言一样。追问

谢谢,我明白了.但是对你的举例不太懂,你的举例是值传递吧? "$k=>&$v"这个语句是怎么传递的呢?

追答

1. 我举的作为对比的例子,是 引用传递 例子。

2. "$k=>&$v"这个语句是怎么传递的,这个你可以再仔细看看php语言对 foreach 的说明,就可以理解了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-09
你第一个foreach里面,修改了$v的值,但是对数据不影响。实际上它只是一个临时的变量,通过foreach赋给了$v,而第二个foreach却修改了数组中索引为1的值。这没问题啊?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网