在PHP中增加数组值的问题

时间:2014-01-11 10:49:06

标签: php arrays

在我的项目中,我增加了firstArray的值+ 3.在我增加secondArray +7的值之后。

   $firstArray = array(
      'a' => 1,
      'b' => 3,
      'c' => 5,
   );

foreach ($firstArray as &$item) {
    $item += 3;
}
print_r($firstArray);

结果: Array ( [a] => 4 [b] => 6 [c] => 8)

  $secondArray = array(
    'a' => 11,
    'b' => 13,
    'c' => 17,
);

foreach ($secondArray as $key=>$item) {
    $secondArray[$key] += 7;
}

print_r($secondArray);

结果: Array ( [a] => 18 [b] => 20 [c] => 24 )

问题是我做print_r($firstArray) again;时有这个结果: 数组([a] => 4 [b] => 6 [c] => 17)

为什么结果fisrt和thisrd有区别?

2 个答案:

答案 0 :(得分:1)

问题是,您使用$ item 作为链接,并在一次循环之后再次使用它(我认为在重用$ item后重写了一些值)。在第一次循环后你需要取消设置($ item),甚至在使用它们之后也是未设置的链接。

$firstArray = array(
    'a' => 1,
    'b' => 3,
    'c' => 5,
);

foreach ($firstArray as &$item) {
    $item += 3;
}
print_r($firstArray);

unset($item);

现在结果很好

答案 1 :(得分:1)

您可以使用array_map代替循环和传递引用。你可以避免这种变异。例如:

$add = function($x) {
  return function($y) use($x) {
    return $x + $y;
  };
};

$firstArray = array_map($add(3), $firstArray);
$secondArray = array_map($add(7), $secondArray);