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
的数组副本。为什么&
不起作用?
答案 0 :(得分:6)
holder.adapterPosition
仅在常规按值模式下使用数组副本,而不在按引用模式下使用。因此,PHP 7中的更改与此代码无关。
但是在第二个代码块中,您没有使用变量作为迭代的数组,因此没有可引用的内容。相反,您有一个表达式,并且表达式的值是数组的副本。从本质上讲,它等效于:
<?php
$query=mysqli_query($con,"select size.id, size.sizeName,
products.productSize from size INNER JOIN products ON
size.id=products.productSize WHERE products.id='$pid'");
while($row = mysqli_fetch_assoc($query)) {
$size[] = $row['productSize'];
}
foreach ($size as $res){
echo '<option value='.$res['size.id'].'>'.$res['sizeName'].'</option>';
}
?>
这将更新foreach
,但不会更新$temp = $array1 = $array2;
foreach ($temp as &$value) {
$value *= 2;
}
或$temp
。