PHP中foreach引用的坑

2017-11-24  本文已影响0人  唐西铭

背景

已知一个map如下:

$array = array(
  "key1" => 1,
  "key2" => 2,
  "key3" => 3
)

想要做的操作:

实现方式

方案

主要通过foreach&(引用)实现,如下:

// step1
foreach($array as $key => &$value) {
  $value += 1;
}

// step2
$result = array();
foreach($array as $key => $value) {
  array_push($result, $value);
}
print_r($result);

如果不用&(引用),无法修改数组的值。

如果想在遍历数组的过程中修改数组的元素,可以在foreach中对$value使用引用。此时被引用的元素$value指向当前数组元素的内存地址,即共享一段内存地址。因此修改$value的值会同时改变$array[$key]的值。

结果

$result = array(2, 3, 3)

分析

当使用&(引用)后,$value值的修改会同时修改原数组中的值,在step1过后,$value始终指向数组最后一个元素,在step2遍历过程中,一直在修改数组最后一个元素的值。过程如下:

image.png
解决方案:

结论

上一篇下一篇

猜你喜欢

热点阅读