搜尋

首頁  >  問答  >  主體

php foreach 循环中里面的元素被删。会影响循环吗?

foreach($items as item){
    //在$items里面删除$item会影响循环的次数莫???
}

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

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

ringa_leeringa_lee2774 天前1063

全部回覆(17)我來回復

  • ringa_lee

    ringa_lee2017-04-10 15:59:20

    How 'foreach' actually works

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:59:20

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

    <?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 ( )
    

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 15:59:20

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-10 15:59:20

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 15:59:20

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:59:20

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-10 15:59:20

    foreach($items as $key=>item){
        unset($items[$key])
    }
    

    回覆
    0
  • 迷茫

    迷茫2017-04-10 15:59:20

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

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:59:20

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

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:59:20

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

    回覆
    0
  • 取消回覆