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

这麽慢,然后在代码中分块记录它的耗时时间, 发现是在 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秒内;

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

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

  1. php大数组循环嵌套的性能优化

    一.前言 博主最近在用elasticsearch做项目,查出来的数据都是数组,在筛选数据组装数据的时候,难免会碰到循环嵌套的问题.如果两个50000的数组循环嵌套,那实际运算则是50000*50000 ...

  2. PHP数组foreach循环

    PHP数组foreach循环 定义数组: $array = ['name'=>'张三', 'age'=>18, 'sex'=>'男', '爱吃土']; 1.只读取值: foreach ...

  3. 取得数组下标_《零基础C++入门教程》——(8)搞定二维数组与循环嵌套

    一.学习目标 了解二维数组的使用方法 了解循环嵌套的使用方法 目录 预备第一篇,使用软件介绍在这一篇,C++与C使用的软件是一样的,查看这篇即可:<零基础看得懂的C语言入门教程>--(二) ...

  4. DevExpress ChartControl大数据加载时有哪些性能优化方法

    DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等) ...

  5. php foreach id是否存在数组_45个PHP程序性能优化的小技巧,赶紧收藏吧

    在我们平常写代码的过程中,除了数据库的优化,针对与文件的优化,我们还需要对PHP执行优化. 在项目开发过程中,我们经常会遇到了一些PHP处理程序性能低下的情况,程序运行在centos+nginx环境, ...

  6. php数组,foreach循环合并数组,array_merge()的循环用法

    比如我知道了三个一级分类的id,1,2,3 $arr1=array(1,2,3); 我要循环这三个分类,依次去数据库查询他们各自的子分类.结果是得到三个数组 现在想他所有子分类合并在一起.然后,再随机 ...

  7. oracle for循环遍历数组,foreach循环

    Smarty foreach控制循环次数 1.在 smarty 中数组是经常会用到的,循环遍历数组用 section 或者 foreach ,如何得到数组长度或者判断一个数组个数呢?可以用{$arra ...

  8. 《零基础看得懂的C++入门教程 》——(8)搞定二维数组与循环嵌套

    一.学习目标 了解二维数组的使用方法 了解循环嵌套的使用方法 目录 预备第一篇,使用软件介绍在这一篇,C++与C使用的软件是一样的,查看这篇即可:<软件介绍> 想了解编译原理和学习方法点这 ...

  9. 《零基础看得懂的C语言入门教程 》——(九)C语言二维数组与循环嵌套

    一.学习目标 了解二维数组的使用方法 了解循环嵌套的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那么难简单开发带你了 ...

最新文章

  1. 决策树模型回归可视化分析_【时间序列分析】在论文中用向量自回归(VAR)模型时应注意哪些问题?...
  2. 阿里如何实现100%容器化镜像化?八年技术演进之路回顾 1
  3. beta冲刺(1/7)
  4. 记录今天写的几个正则,数字范围的校验
  5. vlookup 2张表 显示na_【Excel 函数】Vlookup 正反向查询
  6. Java中Javadoc的{@link}与@see的简单区别
  7. ThinkPHP3.2.3执行页面循环案例代码(部分)
  8. bzoj4419 [Shoi2013]发微博 差分
  9. 子文件夹的权限统一于E盘的权限
  10. Repeater控件的
  11. 15. 从远程库克隆
  12. 10015---Nginx 常用命令
  13. 不礼让行人怎么抓拍的_注意啦!电子警察如何抓拍不礼让行人?所有司机都要看看...
  14. 【机器视觉】Halcon 18安装教程
  15. 视频截帧:javacv实现视频截帧功能
  16. TP-LINK TL-WDN7200H ubuntu驱动安装
  17. 【历史上的今天】1 月 20 日:Scala 问世;苹果低谷期的开始;专家系统之父诞生
  18. 百度网盘怎么分享文件(或加密或不加密)
  19. 无人配送“战斗员”新星,PIX助力创新企业逆讯发布智能物流机器人
  20. 三种方法解决动态换IP需求

热门文章

  1. Redis 复制、Sentinel的搭建和原理说明(转)
  2. java dem数据格式解析_NSDTF-DEM格式数据
  3. android自动化获取toast,成都汇智动力小强哥系列-Appium中Android自动化怎么获取浮层的toast...
  4. 时艳强对话Ricky Ng:交易平台新势力 引领行业新变革
  5. 为什么要搞东数西算?
  6. Hadoop的三大核心组件
  7. 大物下第10章熟记内容
  8. EKS学习 环境搭建方法
  9. python提取文件中特定字符串
  10. PostgreSQL最后的救命稻草 — pg_resetwal