PHP使用foreach循环改变数组自身的方法

在使用foreach循环向数组添加新的值时,出现了,已经添加进去了但实际输出并未发生变化的问题,出错代码以下

foreach ( $ProjectRes as  $project) {
                array_push($project,$device);
//                var_dump($project);
//                echo("<br/>");
            }

首先,projectRes是一个存放着project数组的数组php

  这里能够看到,我是想向每个project数组,追加一个新的变量(device数组),

可是操做完成以后,我实际输出这个projectRes,却并无发生变化。因而我将project输出,

发现是包含着device。

先说解决方法,使用foreach的另外一种遍历方法。正确代码以下

foreach ( $ProjectRes as  $k=>$v) {
                $ProjectRes[$k]['device'] = $device;
            }

下面分析原理html

参考博客 https://www.cnblogs.com/yangwenxin/p/5845212.htmlexpress

参考博客 https://blog.csdn.net/fangkang7/article/details/82384917数组

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

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

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

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

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

 

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

例如:对象

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); // 最后取消掉引用

这样也就成功。

相关文章
相关标签/搜索