【发布时间】:2019-06-05 03:45:09
【问题描述】:
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。为什么& 不起作用?
【问题讨论】:
-
你能做一个这样的内联声明并在同一个地方传递一个变量作为引用吗?在这种情况下,for each 会使用哪个?
-
@Dharman 这不是关于 foreach 的工作原理,而是赋值表达式本身返回一个值。
-
foreach ($arr2 = $arr1 as ...等价于foreach (function() as ...- 在这两种情况下,迭代器都会循环遍历操作后丢弃的临时数组
标签: php arrays foreach php-7.1