php foreach 循环中里面的元素被删。会影响循环吗?
ringa_lee
ringa_lee 2017-04-10 15:57:20
0
17
1058
foreach($items as item){
    //在$items里面删除$item会影响循环的次数莫???
}

因为我的这个$items数组很长。里面的每个item我只需要使用一次。然后就不会使用了。
我的想法就是使用一个删除一个。这样循环的元素就会越来越少。这个循环的运行时间就会比原来短。这种认识合理莫???

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes)
测试的时候这个错误如何解???

ringa_lee
ringa_lee

ringa_lee

全部回复(17)
左手右手慢动作

How 'foreach' actually works

这个上面的回答很有深度,表示没怎么看明白,但是还是给题主献上。

大家讲道理

不会的、实际行动告诉你。

<?php
$items = [1,2,3,4,5];
foreach ($items as $key => $value) {
    unset($items[$key]);
    print_r($items);
}
print_r($items);
//循环开始
Array ( [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) 
Array ( [2] => 3 [3] => 4 [4] => 5 ) 
Array ( [3] => 4 [4] => 5 ) 
Array ( [4] => 5 ) 
Array ( ) 
//循环结束
Array ( )
Ty80

这个时间不会节省吧,每次循环都要对数组剔除,取数组[0],这时间会比每次循环直接取数组[i]来的更浪费吧

左手右手慢动作

要想知道结果,最好的方式就是亲自实践一下!

洪涛

不会吧,游标还是会一直往前推进呀

伊谢尔伦

不会,数组在遍历的时候是使用的其一个副本

左手右手慢动作
foreach($items as $key=>item){
    unset($items[$key])
}
迷茫

并不会啊,自己动手实践一下就知道了

Peter_Zhu

并不会删除,foreach在循环的时候,数组下标不断向前推,你操作一个删除一个并不会影响。

但是,我想说,这样操作对楼主所说的很长的数组操作有速度上的优化吗?好像并没有!

巴扎黑

不必要删除...
foreach的实现方式是借助数组的内部指针的...你遍历完这一个,指针就向后移动一个,所以你删除前面的值对这个根本就没影响,反而会破坏这个数组,比如遍历后还要用到这数组呢,而且删除的过程虽然消耗时间不多,但也是要消耗的...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!