PHP - 在foreach循环中变量之前的&符号

时间:2012-01-07 11:24:08

标签: php foreach reference

  

可能重复:
  Reference - What does this symbol mean in PHP?

我需要知道为什么我们在foreach循环中的变量之前使用&符号

foreach ($wishdets as $wishes => &$wishesarray) {
    foreach ($wishesarray as $categories => &$categoriesarray) {

    }
}

4 个答案:

答案 0 :(得分:55)

此示例将向您显示差异

$array = array(1, 2);
foreach ($array as $value) {
    $value++;
}
print_r($array); // 1, 2 because we iterated over copy of value

foreach ($array as &$value) {
    $value++;
}
print_r($array); // 2, 3 because we iterated over references to actual values of array

在此处查看PHP文档:http://pl.php.net/manual/en/control-structures.foreach.php

答案 1 :(得分:15)

这意味着它是通过引用传递而不是值... IE对变量的任何操作都会影响原始。这与任何修改不会影响原始对象的值不同。

在stackoverflow上多次询问。

答案 2 :(得分:7)

用于将单个数组实例中的更改应用于主数组..

作为:

//现在更改不会影响数组$ wishesarray

foreach ($wishesarray as $id => $categoriy) {
      $categoriy++;
}
print_r($wishesarray); //It'll same as before..

但现在变化将反映在数组$ wishesarray中

foreach ($wishesarray as $id => &$categoriy) {
      $categoriy++;
}
print_r($wishesarray); //It'll have values all increased by one..

答案 3 :(得分:3)

对于你问题中的代码,可能没有给出具体的答案,因为内部foreach循环是空的。

我在您的代码中看到的是,内部foreach遍历引用而不是常见方式。

我建议您阅读foreach PHP Manual page,它涵盖所有四种情况:

foreach($standard as $each);

foreach($standard as &$each); # this is used in your question

$reference = &$standard;
foreach($reference as $each);

$reference = &$standard;
foreach($reference as &$each); # this is used in your question