Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这两个数组迭代之间的区别是什么?_Php_Arrays_Loops_Object_Iteration - Fatal编程技术网

Php 这两个数组迭代之间的区别是什么?

Php 这两个数组迭代之间的区别是什么?,php,arrays,loops,object,iteration,Php,Arrays,Loops,Object,Iteration,我正在学习PHP,准备参加高级考试。实践测试表明,第一次迭代优于第二次迭代。我不明白为什么。它们都可以很好地迭代数组的内容 //第一个: foreach($array as $key => &$val) { /* ... */ } //第二个: foreach($array as $key => $val) { /* ... */ } 实践测试表明,第一次迭代优于第二次迭代 这不是最好的建议。它们是不同工作的不同工具 &表示通过引用而不是副本来处理变量 当您有一个变量引

我正在学习PHP,准备参加高级考试。实践测试表明,第一次迭代优于第二次迭代。我不明白为什么。它们都可以很好地迭代数组的内容

//第一个:

 foreach($array as $key => &$val) { /* ... */ }
//第二个:

foreach($array as $key => $val) { /* ... */ }
实践测试表明,第一次迭代优于第二次迭代

这不是最好的建议。它们是不同工作的不同工具

&
表示通过引用而不是副本来处理变量

当您有一个变量引用时,它类似于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"
上的参考示例

foreach
的正常行为是将副本提供给相关块。这意味着您可以自由地重新分配它,并且它不会影响数组成员(对于总是引用的变量,例如类实例,情况并非如此)

将示例复制到上

在上初始化实例示例

foreach
中使用引用会产生一些副作用,例如对迭代的最后一个值的悬空
$val
引用,以后可能会意外修改该引用并影响数组


悬空引用示例打开。

第一个示例包括
$val
-->的
&
引用运算符对
$val
的任何更改都将保存到
$array


不过,这决不是比例子2“好”的地方。

是的,它更容易让人困惑:我建议你阅读。什么考试?我不敢相信这是Zcerated的:谢谢你的帮助!你能多说一点关于“参考而不是副本”的事吗?我对&的唯一理解是在变量上写,比如$Foo2=&$Foo1;我懂了。那么如果我使用&我可以通过调用$val在foreach循环之外编辑数组?非常感谢!你在这方面做得非常出色。在参加PHP单元测试之前,我还需要更多的实践/学习。你对帮助我学习的好网站有什么建议吗?@Willow这个问题通常会导致更多的问题,而不是有用性。至于了解PHP,请阅读大量的堆栈溢出问题,并在尽可能地了解PHP之后,在遇到问题时提出问题。