淘先锋技术网

首页 1 2 3 4 5 6 7

PHP中的foreach循环结构是一个常用的遍历数组的方法,但有时候我们需要对数组的每个元素进行修改,这时就要用到引用传递符号&。我们称这种方式为“引用传递”或“引用赋值”,下面我们来详细了解一下foreach &$的用法。

对于普通的foreach循环结构,我们循环时只能获取到数组的每个元素的值,例如:

$nums = array(1, 2, 3, 4, 5);
foreach ($nums as $val) {
echo $val . " ";
}

上面的代码会输出:1 2 3 4 5

但是有时候我们需要修改数组中每个元素的值,这时候就要使用引用传递符号&了。例如我们要将数组中的每个元素都加上1:

$nums = array(1, 2, 3, 4, 5);
foreach ($nums as &$val) {  // 注意这里加上了&
$val++;  // 对每个元素进行加1操作
}
unset($val);  // 取消引用
echo implode(" ", $nums);

上面的代码会输出:2 3 4 5 6。这里要注意,如果不在foreach循环之后调用unset()函数取消引用,可能会引发意料之外的错误。

引用传递符号&还可以用于修改多维数组中的值。例如有以下二维数组:

$nums = array(
array(1, 2, 3),
array(4, 5, 6)
);
foreach ($nums as &$arr) {
foreach ($arr as &$val) {
$val *= 2;  // 对每个元素进行乘2操作
}
unset($val);  // 释放最后一个元素的引用
}
unset($arr);  // 释放最后一个数组的引用
echo json_encode($nums);

上面的代码会输出:[[2,4,6],[8,10,12]]。

需要注意的是,引用传递符号&只对foreach循环之内有效。例如下面的代码是无法改变数组中的值的:

$nums = array(1, 2, 3, 4, 5);
foreach ($nums as &$val) {
$val++;  // 对每个元素进行加1操作
}
unset($val);  // 取消引用
function test(&$arr) {
foreach ($arr as &$val) {
$val++;  // 对每个元素进行加1操作
}
unset($val);  // 释放最后一个元素的引用
}
test($nums);
echo implode(" ", $nums);

上面的代码会输出:2 3 4 5 6,而不是3 4 5 6 7。

到这里,我们对foreach &$的使用方法已经有了比较深刻的理解。在实际开发中,我们需要根据具体情况选择合适的方法来操作数组中的元素,提高代码的效率和可读性。