为什么在foreach循环中不对数组进行修改时,它还是会复制数组?
为什么在foreach循环中不对数组进行修改时,它还是会复制数组?
这个问题已经在此处有了答案:
在一篇博客“PHP内部:什么时候foreach会复制”中,NikiC表示在像这样的代码中:
片段1
$array = range(0, 100000); foreach ($array as $key => $value) { xdebug_debug_zval('array'); // array is not copied, only refcount is increased }
foreach
不会复制数组,因为foreach
修改的唯一一件事情是修改$array
的内部数组指针。
他还表示,在像这样的代码中:
片段2
$array = range(0, 100000); // line 1 test($array); function test($array) { foreach ($array as $key => $value) { // line 4 xdebug_debug_zval('array'); // array is copied, refcount not increased // ... } }
foreach
会复制数组,因为如果不这样做,第1行中的$array
变量将被更改。
然而,foreach修改的唯一一件事情是修改$array
的内部数组指针。那么,既然在片段1中更改了$array
的内部数组指针并不重要,为什么在片段2中重要呢?
为什么foreach
需要在片段2中复制数组,即使我们在循环中没有修改它?
admin 更改状态以发布 2023年5月22日