gpt4 book ai didi

php - PHP 的 foreach 幕后发生了什么?

转载 作者:可可西里 更新时间:2023-10-31 22:39:45 24 4
gpt4 key购买 nike

PHP 7.1 中的实验(docker image nanoninja/php-fpm:7.1)

在下一段代码中,一切都清楚了:

$arr1 = [1, 2, 3];

foreach ($arr1 as &$value) {
$value *= 2;
}

我们有数组 $arr1 并将所有值乘以 2。结果:

array(3) {
[0]=>
int(2)
[1]=>
int(4)
[2]=>
&int(6)
}

但是这个语句中发生了什么:

$arr1 = [1, 2, 3];

foreach ($arr2 = $arr1 as &$value) {
$value *= 2;
}

数组 $arr1$arr2 的结果将不可更改:

array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}

为什么会这样?我知道在 PHP > 7 中 foreach 使用数组的副本,但在这种情况下它使用哪个数组的副本 $arr1$arr2 .为什么 & 不起作用?

最佳答案

foreach 仅适用于正常按值模式的数组副本,不适用于按引用模式。因此 PHP 7 中的更改与此代码无关。

但是在你的第二个代码块中,你没有使用变量作为数组来迭代,所以没有什么可以引用的。相反,您有一个表达式,表达式的值是数组的副本。它本质上等同于:

$temp = $array1 = $array2;
foreach ($temp as &$value) {
$value *= 2;
}

这将更新 $temp,但不会更新 $array1$array2

关于php - PHP 的 foreach 幕后发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54125863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com