我正在学习PHP进行高级考试。练习测试说第一次迭代比第二次迭代更好。我不明白为什么。他们都很好地迭代数组的内容。
//第一个:
foreach($array as $key => &$val) { /* ... */ }
//第二个:
foreach($array as $key => $val) { /* ... */ }
答案 0 :(得分:10)
练习测试说第一次迭代比第二次更好。
这不是最好的建议。它们是不同工作的不同工具。
&
表示通过引用而不是副本来处理变量。
当你有一个变量引用时,它类似于C中的指针。访问变量可以访问原始变量的内存位置,允许你通过不同的标识符修改它的值。
// Some variable.
$a = 42;
// A reference to $a.
// & operator returns a reference.
$ref = &$a;
// Assignment of $ref.
$ref = "fourty-two";
// $a itself has changed, through
// the reference $ref.
var_dump($a); // "fourty-two"
CodePad上的参考示例。
foreach
的正常行为是使副本可用于关联的块。这意味着你可以自由地重新分配它,它不会影响数组成员(对于总是引用的变量,例如类实例,情况就不是这样了。)
CodePad上的复制示例。
CodePad上的类实例示例。
在foreach
中使用引用会产生一些副作用,例如对迭代的最后一个值的悬空$val
引用,以后可能会意外修改并影响数组。
悬挂CodePad上的参考示例。
答案 1 :(得分:1)
第一个示例包含&
的{{1}}引用运算符 - >对$val
的任何更改都将保存到$val
。
但这并不比示例#2“更好”。