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

Sac*_*ant 47 php foreach reference

可能重复:
参考 - 这个符号在PHP中意味着什么?

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ski 58

此示例将向您显示差异

$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
Run Code Online (Sandbox Code Playgroud)

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


Ala*_*ter 17

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

在stackoverflow上多次询问此问题.

  • 如果你知道"在StackOverflow上多次询问"那你为什么要回答它?找到一个合适的复制品并作为评论提供(或一旦达到3k就关闭投票) (6认同)
  • 要添加,"按引用"表示它指的是所引用变量的相同分配内存块 (3认同)
  • 而不是"按值",这意味着变量的副本由PHP在新的内存块中创建. (2认同)

Raj*_*hal 7

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

如:

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

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

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

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