为什么会有“&” in($ arr as& $ value)?

时间:2009-11-16 14:25:25

标签: php arrays foreach

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

$ key是否意味着数组的索引?

5 个答案:

答案 0 :(得分:11)

&$variable_name是PHP通过引用传递的方式:

请参阅:http://php.net/manual/en/language.references.pass.php

有关更多参考资料的解释,请参阅: http://www.php.net/manual/en/language.references.whatare.php

答案 1 :(得分:11)

    $arr = array(1, 2, 3, 4);

    foreach ($arr as $value)
       $value = $value * 100;
    echo implode(' ', $arr); // 1 2 3 4

    foreach ($arr as &$value)
        $value = $value * 100;
    echo implode(' ', $arr); // 100 200 300 400

得到了吗?

答案 2 :(得分:3)

你有两个不同的问题。要回答关于&符号的第一个问题(&):

每当您看到变量前面传递的&时,就意味着您将使用实际变量而不是它的副本。在您的示例中,$value通常是实际$value的副本,因此对该变量所做的任何更改都不会影响该数组。但是当你将&放在它前面时,你正在处理实际的数组数据。

要回答第二个问题,是的,$key是数组的索引,无论是数字还是关联。

答案 3 :(得分:0)

&告诉PHP使$ value成为对实际数组项的引用,而不是数组项的副本。如果没有&,您的代码实际上不会修改数组中的值。

答案 4 :(得分:0)

&允许您更改$value中的值。您可以通过尝试而不进行实验。这被称为通过引用传递。

此处的示例对于解释$key并不是很好,因为您显示的是常规数组而不是关联数组。这是一个更好的例子来说明$key

$a = array(
  "red" => 1,
  "green" => 2,
  "blue" => 3,
  "white" => 17 /* btw, I patent the white pixel! */
);

foreach ($a as $key => $value) {
  echo "key $key, val $value";
}