【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) 来释放变量,这样就可以得到正确的结果了。

相关文章
|
7月前
|
PHP
php的foreach神操作
php的foreach神操作
45 0
|
JSON 关系型数据库 MySQL
PHP用foreach循环读取json数据的方法
PHP用foreach循环读取json数据的方法
548 0
PHP用foreach循环读取json数据的方法
|
PHP Python
关于python变量的再次折腾,没有PHP的引用赋值
今天,重看php文档的时候,发现了这样的讲法
40 0
|
PHP 数据库 索引
PHP中的for循环和forEach循环
PHP中的for循环和forEach循环
|
PHP Windows
PHP 中 for 循环和 foreach 循环的性能和可读性
PHP 中 for 循环和 foreach 循环的性能和可读性
126 1
PHP 中的引用赋值运算符
PHP 中的引用赋值运算符
|
PHP
【web 开发基础】PHP 快速入门(6)-PHP 运算符之赋值运算符详解
上面是 PHP 开发基础快速入门系列的文章,通过前面几篇文章的介绍我们或多或少对PHP的开发有所了解。我们了解了PHP相关的基本概念以及简单的用法,正所谓万事开头难,这已经到了第6篇,说明我们已经度过了最难的时候,开弓没有回头箭,接着继续学习PHP开发的相关内容。本文接着介绍PHP运算符相关的知识--赋值运算符。了解赋值运算符我们依然不落俗套,首先来了解它是什么,再了解它怎么用。
101 1
|
PHP
php多变量赋值的方法
php多变量赋值的方法
119 0
|
XML NoSQL PHP
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
PHP既然已经有了foreach了,为什么还需要迭代器?底层原理是什么?
240 0
PHP中的对象可以进行foreach遍历吗?底层原理是什么?
PHP中的对象可以进行foreach遍历吗?底层原理是什么?
153 0