PHP - foreach循环中变量之前的&符号[重复]
Posted
技术标签:
【中文标题】PHP - foreach循环中变量之前的&符号[重复]【英文标题】:PHP - Ampersand before the variable in foreach loop [duplicate] 【发布时间】:2012-02-04 20:36:17 【问题描述】:可能重复:Reference - What does this symbol mean in php?
我需要知道为什么我们在 foreach 循环中的变量之前使用 & 符号
foreach ($wishdets as $wishes => &$wishesarray)
foreach ($wishesarray as $categories => &$categoriesarray)
【问题讨论】:
重要的问题是循环变量在循环范围之外泄漏(因为 PHP 没有块范围,以使事情更有趣)。因此,如果您稍后分配给循环变量,则会破坏数组。即使您将它用作另一个循环中的循环变量,也会发生这种情况,从而导致非常“有趣”的错误。一个解决方案是在循环之后 unset() 循环变量。 【参考方案1】:这个例子会告诉你区别
$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
【讨论】:
by reference 语法是否经常会导致错误,例如:“无法创建对字符串偏移量的引用”?【参考方案2】:这意味着它是通过引用而不是值传递... IE 对变量的任何操作都会影响原始变量。这与任何修改都不会影响原始对象的值不同。
这在***上被问了很多次。
【讨论】:
补充一下,“通过引用”意味着它指的是被引用的变量所分配的同一个内存块 与“按值”相反,这意味着变量的副本由 PHP 在新的内存块中创建。 问题示例代码I outlined both中的引用传递方式有两种。 如果你知道“这在 *** 上被问了很多次”,那你为什么要回答呢?找到合适的副本并将其作为评论提供(或在达到 3k 后进行近距离投票)【参考方案3】:用于将单个数组实例的更改应用到主数组..
作为:
//现在更改不会影响数组 $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..
【讨论】:
【参考方案4】:对于您问题中的代码,由于内部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
【讨论】:
以上是关于PHP - foreach循环中变量之前的&符号[重复]的主要内容,如果未能解决你的问题,请参考以下文章