在PHP中可以使用foreach进行变量的循环,它有两种语法:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
很多时候,我们需要在循环的过程中修改数组元素的值,此时就会想到用引用的方式来遍历数组。可以通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝赋值。
同时,需要注意:数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。如果在后面还会使用$value这个变量,那么此时就有可能修改数组的最后一个元素值。因此,在后续的使用建议使用 unset() 来将其销毁。
示例一:
<?php
$arr1 = array(1, 2, 3, 4);
foreach ($arr1 as &$value) {
echo $value;
}
echo PHP_EOL;
$arr2 = array('a', 'b', 'c', 'd');
foreach ($arr2 as $value) {
echo $value;
}
echo PHP_EOL;
var_dump($arr1);
var_dump($arr2);
输出结果:
1234
abcd
array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
&string(1) "d"
}
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
}
从上面的输出结果可以看到,经过上面的两次循环,$arr1的最后一个元素被修改成$arr2的最后一个元素了。
如果在第一次引用循环结束后,使用unset($value) 就可以避免后面被修改。
参考资料
1、https://www.php.net/manual/zh/control-structures.foreach.php