关于php:php-foreach循环中变量之前的&符号

PHP - Ampersand before the variable in foreach loop

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Reference - What does this symbol mean in PHP?

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

1
2
3
4
5
foreach ($wishdets as $wishes => &$wishesarray) {
    foreach ($wishesarray as $categories => &$categoriesarray) {

    }
}


这个例子将向您展示不同之处

1
2
3
4
5
6
7
8
9
10
$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


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

在StackOverflow上会多次询问此问题。


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

AS:

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

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

但现在的变化也会反映在$wishesarray数组中。

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

对于问题中的代码,不能给出特定的答案,因为foreach内部循环是空的。

我在代码中看到的是,内部foreach迭代引用,而不是普通的方式。

我建议您阅读一下foreachphp手册页,它涵盖了所有四种情况:

1
2
3
4
5
6
7
8
9
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