php foreach数组问题

$array=array('1','1');foreach($arrayas$k=>$v){$v=200;}print_r($array);这道题的答案是Array([0... $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 ) 呢
展开
 我来答
windblast
推荐于2016-04-21 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13616
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
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 的说明,就可以理解了。
li568298427
2012-04-09 · 超过18用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:41.9万
展开全部
你第一个foreach里面,修改了$v的值,但是对数据不影响。实际上它只是一个临时的变量,通过foreach赋给了$v,而第二个foreach却修改了数组中索引为1的值。这没问题啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式