php嵌套循环太慢,php 大数组 foreach 循环嵌套的性能优化

前提:最近在做后台的时候,页面加载太慢,故第一时间想到的自然是优化SQL, 优化后sql查询速度从 2秒变成了零点几秒, 以为就这麽完事了,然并卵,加载竟然花费30秒!

e6d05cd0babfee8b059515ee701e72a7.png

这麽慢,然后在代码中分块记录它的耗时时间, 发现是在 foreach 遍历的问题,嵌套数据量太大了, 我还嵌套了三层, 数据量大约为: 30*20000*20000;

额~ ~, 相乘起来数据量有点大了,怪不得会慢~

1、模拟场景, 优化前是这样的:

for($i=0; $i<30; $i++){

for($j=0; $j<20000; $j++){

for($k=0; $k<20000; $k++){

if($j == $k){

// TODO

}

}

}

}

2、 优化后:

for($i=0; $i<30; $i++){

$tempArr = array();

for($j=0; $j<20000; $j++){

$tempArr[$j] = $j;

}

for($k=0; $k<20000; $k++){     // isset 函数

if(isset($tempArr[$k])){

// TODO

}

}

// 用完即销毁临时数组

unset($tempArr);

}

将最里面的数组放出来,就把遍历数量拉低了, 再用isset()内置函数加快对比速度,效果是显著的, 优化后变成了2秒内;

7d522a5bab357c951b5c06e6b136016c.png

来源:https://www.cnblogs.com/pyspang/p/12035177.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值