这两个数组迭代有什么区别?

Wil*_*low 5 php arrays iteration loops object

我正在学习PHP进行高级考试.练习测试说第一次迭代比第二次迭代更好.我不明白为什么.他们都很好地迭代数组的内容.

// 第一:

 foreach($array as $key => &$val) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

// 第二个:

foreach($array as $key => $val) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

ale*_*lex 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"
Run Code Online (Sandbox Code Playgroud)

CodePad上的参考示例.

正常行为foreach是使副本可用于关联的块.这意味着你可以自由地重新分配它,它不会影响数组成员(对于总是引用的变量,例如类实例,情况不会这样).

CodePad上复制示例.

CodePad上的类实例示例.

在a中使用引用foreach有一些副作用,例如$val对迭代的最后一个值的悬空引用,可以在以后偶然修改并影响数组.

CodePad悬空参考示例.