php foreach数组问题

发布网友 发布时间:2022-04-06 01:08

我来回答

6个回答

懂视网 时间:2022-04-06 05:30

php foreach修改数组的方法:首先创建一个PHP示例文件;然后通过foreach语句“foreach($array as $k => $v){$v = 1;}”修改指定数组中的值即可。

推荐:《PHP视频教程》

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

翻到PHP文档的foreach那页这样写道:

“foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:

foreach (array_expression as $value)
 statement
foreach (array_expression as $key => $value)
 statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。”

那么“第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。”是什么意思?意思就是说用foreach来遍历数组,所操作的是指定数组的一个拷贝,而不是数组本身。就像有一个克隆的你,别人对克隆的你不管怎么拳打脚踢,对你也是没有影响的。

例如:

foreach($array as $k => $v){
  $v = 1;
}

这样的修改方法修改的并不是$array本身,是修改它拷贝的一个数组,虽然一样但不是$array.所以对$array没有影响。

那么要怎么做?要这样做:

foreach($array as $k => $v){
  $array[$k] = 1;
}

虽然$k和$v一样也是拷贝的,但拷贝的$k的值还是和原数组的$k的值是一样的,所以这样就可以成功了。

还有一种比较高级的方法:可以很容易地通过在 $v 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。例如:

foreach($array as &$v){
  $v = 1;
}
unset($v); // 最后取消掉引用

这样也就成功。

热心网友 时间:2022-04-06 02:38

您好,运行结果没错的。是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也同理

热心网友 时间:2022-04-06 03:56

第一种格式遍历给定的 $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_mp($arr);#打印$arr看下你就明白了,打印之后你再把&去掉,运行再打印,两次比较就清楚 第二种就是把原$arr中的每个单元重新赋值,上面那样写已经很清楚了,不明白的话,就到网上下载一个php手册,好好看看

热心网友 时间:2022-04-06 05:30

$array["1"] = 200; // 这里会把字符串“1”变成整型 1,这里意思是设置第二个元素的值为200第一种格式遍历给定的 $a 数组。每次循环中,当前单元的值被赋给 $b 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 自 PHP 5 起,可以很容易地通过在 $b 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。例如: var_mp($arr);#打印$arr看下你就明白了,打印之后你再把&去掉,运行再打印,两次比较就清楚 第二种就是把原$arr中的每个单元重新赋值,上面那样写已经很清楚了,不明白的话,就到网上下载一个php手册,好好看看

热心网友 时间:2022-04-06 07:22

$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

热心网友 时间:2022-04-06 09:30

php foreach数组问题

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com