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 ) 呢 展开
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 ) 呢 展开
2个回答
推荐于2016-04-21 · 知道合伙人软件行家
关注
展开全部
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语言一样。
$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 的说明,就可以理解了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询