搜尋

首頁  >  問答  >  主體

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_lee2775 天前1064

全部回覆(17)我來回復

  • PHP中文网

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

    这样做并不能减少内存啊。不过可以试试array_shift()或者 array_pop()那个函数,后者要比前者快。如果能考虑一下分治就更好了

    回覆
    0
  • 迷茫

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

    如果你的数组过大,确实有溢出风险,但是你删除元素浪费的性能更多。

    如果你的php version >= 5.5,建议使用php的新特性Generators。使用这种方法的优点是它可以让你在处理大数据集合的时候不用一次性的加载到内存中。甚至你可以处理无限大的数据流。

    回覆
    0
  • 伊谢尔伦

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

    默认是不会删除的,因为是按照值来传递的.如果采用"&"进行引用传递的,那么就会直接删除原来的数组.

    回覆
    0
  • 黄舟

    黄舟2017-04-10 15:59:20

    并不会被删除。
    对于大数组来讲我同意hongchao的看法yield可以帮助你用更少的内存来完成遍历任务,但用的时间会更久。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-10 15:59:20

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

    这个错误是你循环的时候php使用的的内存不够了 134217728=128M 建议调整php.ini里面的memory_limit配置

    回覆
    0
  • 怪我咯

    怪我咯2017-04-10 15:59:20

    第一,你的遍历完一个删一个的思想不但不会优化程序性能,反而会增加负担,因为for each 遍历是内部指针推动的操作,过程是自动的,耗能很低,而你的想法是每操作完一次删一个元素对这个指针推进过程没有丝毫帮助,反而新增性能负担,因为删除元素也需要一点性能,放大后这些不必要的性能支出就变成一个不必要的累赘了; 第二,提示说明你的内存只有128m,不够用哦

    回覆
    0
  • 大家讲道理

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

    foreach 循环每次都会复制把变量的值复制一遍循环。

    回覆
    0
  • 取消回覆