php foreach数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php foreach数组问题相关的知识,希望对你有一定的参考价值。

$array=array('1','2');foreach($array as $k=>$v)$array[$v]=200;var_dump($array);为什么是1 , 200 , 200

您好,运行结果没错的。是1、200、200,因为您设置的数组下标为数组自身每个元素的值。不知道您是否理解了?

循环您可以用笨方法理解:

// foreach 遍历开始,只执行了以下两个步骤:

$array["1"] = 200; // 这里会把字符串“1”变成整型 1,这里意思是设置第二个元素的值为200

$array["2"] = 200; // 同理,这里意思是设置第三个元素的值为200

因此最后结果(那个第一个元素没有被改变,因此仍然存在):

追问

相当于$arr['$v'] = 等于$arr[1],只改变下标1,2,数组从0开始就输出1,下标1赋值为200,下标2也同理

参考技术A 第一种格式遍历给定的 $a 数组。每次循环中,当前单元的值被赋给 $b 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 自 php 5 起,可以很容易地通过在 $b 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。例如: <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) $value = $value * 2; // $arr is now array(2, 4, 6, 8) ?> var_dump($arr);#打印$arr看下你就明白了,打印之后你再把&去掉,运行再打印,两次比较就清楚 第二种就是把原$arr中的每个单元重新赋值,上面那样写已经很清楚了,不明白的话,就到网上下载一个php手册,好好看看 参考技术B $array["1"] = 200; // 这里会把字符串“1”变成整型 1,这里意思是设置第二个元素的值为200第一种格式遍历给定的 $a 数组。每次循环中,当前单元的值被赋给 $b 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 自 PHP 5 起,可以很容易地通过在 $b 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。例如: var_dump($arr);#打印$arr看下你就明白了,打印之后你再把&去掉,运行再打印,两次比较就清楚 第二种就是把原$arr中的每个单元重新赋值,上面那样写已经很清楚了,不明白的话,就到网上下载一个php手册,好好看看 参考技术C $array[$v]中的$v是指数组的值,即1和2,那么循环两次后就相当于 $array[1]=200以及$array[2]=200,这样数组的值就变为1、200、200了
如果是 $array[$k],$k是数组的键名,即0和1,那么循环两次后就相当于 $array[0]=200以及$array[1]=200,这样数组的值会变为 200、200
参考技术D php foreach数组问题

以上是关于php foreach数组问题的主要内容,如果未能解决你的问题,请参考以下文章

php foreach只能遍历数组么

php foreach 修改数组不生效?

深入解析php中的foreach问题

数组php上的foreach数组

php中用foreach改变数组的值的问题

php foreach 嵌套循环大数组很慢?