【PHP】foreach 引用赋值

简介: php foreach 引用赋值,在使用过程中需要及时释放引用变量,防止出现使用时变量污染。

语法结构

foreach($arrayas$key=>$value){
echo$value;
}
foreach($arrayas$value){
echo$value;
}


说明

遍历给定的数组 $array ,在每次循环时,当前单元的值被赋值给 $value(若设置了 $key 那么就会同时将键值也赋值给 $key),同时数组内部的指针向前移一步,从而在下一个循环中得到下一个单元。在这个过程中,所有的操作都是对指定数组 $array 的一个拷贝操作,而不是对 $array 数组本身。也就是无论你如何修改这个 $value , 原数组 $array 都不会有任何改变,因为它只是一个克隆体。

$array= [
"a"=>"a",
"b"=>"b",
"c"=>"c",
];
foreach ($arrayas$value) {
$value .="-copy";
}
var_dump($array);


结果:

如果我们想在循环的同时修改 $array 本身,那么我们可以使用引用赋值的方式:

foreach ($arrayas&$value) {
$value .="-copy";
}
var_dump($array);


可以看到结果中 $array 中的值已经被修改了。那么什么是引用赋值呢?

引用赋值就是让新变量指向原变量,一旦新变量的值发生了改变,那么原来的变量值也会跟着改变。从内存图上我们可以看出引用赋值与传值赋值的区别:

因此引用赋值后,变量 $b 发生改变后 $a 也将发生改变。此时,如果我们基于上面引用赋值后的 foreach 后再进行一次循环,此时不做任何改变直接输出 $value 值:

$array= [
"a"=>"a",
"b"=>"b",
"c"=>"c",
];
foreach ($arrayas&$value) {
$value .="-copy";
}
foreach ($arrayas$value) {
echo"$value";
}
var_dump($array);


结果:

或许我们预期希望输出的是:

a-copyb-copyc-copy


但结果却不对,原因就在于变量 $value 上。分析可知在第一遍引用赋值后,$value 指向 $array 的键值为 c 的值,接着在第二次进行循环时,$value 的值在不停被改变,这就等于 $array["c"] 的值被不停被改变,其过程如下:

为了避免这种情况,我们需要在第一遍循环引用赋值后,执行 unset($value) 来释放变量,这样就可以得到正确的结果了。

相关文章
|
9月前
|
PHP
php的foreach神操作
php的foreach神操作
51 0
|
PHP 数据库 索引
PHP中的for循环和forEach循环
PHP中的for循环和forEach循环
|
PHP Windows
PHP 中 for 循环和 foreach 循环的性能和可读性
PHP 中 for 循环和 foreach 循环的性能和可读性
140 1
|
XML NoSQL PHP
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
250 0
PHP中的对象可以进行foreach遍历吗?底层原理是什么?
PHP中的对象可以进行foreach遍历吗?底层原理是什么?
163 0
|
JSON 关系型数据库 MySQL
PHP用foreach循环读取json数据的方法
PHP用foreach循环读取json数据的方法
557 0
PHP用foreach循环读取json数据的方法
|
JavaScript PHP
【PHP】原生foreach、PHP截取、js截取
【PHP】原生foreach、PHP截取、js截取
544 0
【PHP】原生foreach、PHP截取、js截取
|
PHP
PHP使用foreach修改数组里边的值方案
PHP使用foreach修改数组里边的值方案
120 0
|
PHP
PHP foreach遍历数组(多种方式)
PHP foreach遍历数组(多种方式)
196 0
PHP foreach遍历数组(多种方式)
|
PHP
【从入门到放弃-PHP】foreach 引用的坑
背景描述 先看一段代码。 $arr = [ 'jack' => '20', 'tom' => '21', 'marry' => '54', 'less' => '23' ]; foreach ($arr as &$val) { echo $val; .
1921 0

热门文章

最新文章