php代码优化 -- array_walk 和 foreach, for 的效率的比较
<?php /*** array_walk 和 foreach, for 的效率的比较。* 我们要测试的是foreach, for, 和 array_walk的效率的问题。 *///产生一个10000的一个数组。 $max = 10000; $test_arr = range(0, $max); $temp; //我们分别用三种方法测试求这些数加上1的值的时间。// for 的方法 $t1 = microtime(true); for ($i = 0; $i < $max; $i++) {$temp = $temp + 1; } $t2 = microtime(true); $t = $t2 - $t1; echo "就使用for, 没有对数组操作 花费: {$t}\n";$t1 = microtime(true); for ($i = 0; $i < $max; $i++) {$test_arr[$i] = $test_arr[$i] + 1; } $t2 = microtime(true); $t = $t2 - $t1; echo "使用for 并且直接对数组进行了操作 花费: {$t}\n";$t1 = microtime(true); for ($i = 0; $i < $max; $i++) {addOne($test_arr[$i]); } $t2 = microtime(true); $t = $t2 - $t1; echo "使用for 调用函数对数组操作 花费 : {$t}\n";$t1 = microtime(true); foreach ($test_arr as $k => &$v) {$temp = $temp + 1; } $t2 = microtime(true); $t = $t2 - $t1; echo "使用 foreach 没有对数组操作 花费 : {$t}\n";$t1 = microtime(true); foreach ($test_arr as $k => &$v) {$v = $v + 1; } $t2 = microtime(true); $t = $t2 - $t1; echo "使用 foreach 直接对数组操作 : {$t}\n";$t1 = microtime(true); foreach ($test_arr as $k => &$v) {addOne($v); } $t2 = microtime(true); $t = $t2 - $t1; echo "使用 foreach 调用函数对数组操作 : {$t}\n";$t1 = microtime(true); array_walk($test_arr, 'addOne'); $t2 = microtime(true); $t = $t2 - $t1; echo "使用 array_walk 花费 : {$t}\n";function addOne(&$item) {$item = $item + 1; }
执行的结果:
就使用for, 没有对数组操作 花费: 0.15388584136963
使用 foreach 没有对数组操作 花费 : 0.076934814453125
使用for 并且直接对数组进行了操作 花费: 0.14769005775452
使用 foreach 直接对数组操作 : 0.076115131378174
使用for 调用函数对数组操作 花费 : 0.32393312454224
使用 foreach 调用函数对数组操作 : 0.25716996192932
使用 array_walk 花费 : 0.17966890335083
在对10000个数的操作过程中,这个实验我们可以得出这样的结论:
foreach 的效率要比for 高很多,也许有很大的一个原因是for 要进行很多次条件判断。所以以后能用foreach的地方就用foreach,可以提高1倍的效率。
如果循环内要调用函数,用array_walk 最好,它的效率要比for 高出1倍,要比foreach高出43%的效率。
还有一个提示就是如果你这个程序对效率的要求是很高的,那不要在很深的循环中调用函数,要调用函数也要用array_walk,最好的直接把代码写在循环里面。
本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/4094148.html,如需转载请自行联系原作者
php代码优化 -- array_walk 和 foreach, for 的效率的比较相关推荐
- php array walk 效率,php代码优化系列(二) -- array_walk 和 foreach, for 的效率的比较...
实验是我学习计算机科学的一个重要方法,计算机科学不是简单的智力游戏,它本质上来说不是一门科学,而是一个改造世界的工具.数学方法和实验方法是计算机研究的基本方法,也是我们学习的基本方法,数学锻炼我们的思 ...
- php双层foreach,php 双层foreach 如何提升效率
https://segmentfault.com/q/1010000011609822 两个数组都是近万条元素 切都是二维数组 请问如何优化提高效率 php版本 5.3 foreach ($array ...
- 关于for和foreach,兼顾效率与安全
对于数组的访问,是应该使用for的方式的,因为这样性能更高.以下代码是恰当的. Object[] objArray = ...; int objArrayLength = objArray.Lengt ...
- 转载 foreach比递归效率低
转载原文于phpchina 刚在phpcms函数文件看到一个将数组转换为序列化的url函数,使用了三层foreach实现,我就很奇怪,为什么不用递归,群里面问了问,有几位朋友说是递归效率差,所以就做了 ...
- foreach求和的效率和连接mysql的sum求和的效率
范例: /** * 更新项目进度1 使用foreach循环求和 */ public function save_pro_finish_proportion1($pid){ $list = $this- ...
- php中对数组进行for循环,php数组for循环
Swift中的循环语句 循环语句能够使程序代码重复执行.Swift编程语言支持4种循环构造类型:while.do while.for和for in.for和while循环是在执行循环体之前测试循环条件 ...
- 关于程序中查询效率的问题
关于程序中查询效率的问题 在程序编码过程中会和很多的各种各样的数据打交道,正确的操纵数据是每个程序员的必备功课,也是最根本的.但是如何快速高效的查询出自己所需要的数据或者说符合条件的数据则显得至关重要 ...
- python中if的效率_Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
- foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比
在Java中对于集合的遍历,一般有以下三种方法: for循环 foreach循环 Iterator遍历 下面来分析一下for循环和foreach循环的效率对比以及简单分析一下原因. 看下面的代码: p ...
最新文章
- ldap 统一认证 java_如何在你的系统里集成LDAP统一认证
- STL_Hash_map
- 安卓手机可以连接斑马系统吗_Zebra斑马 StageNow 安卓系统移动设备快速部署工具...
- 零基础学Python(第十四章 字典)
- Unity Fine Prued Tiled Light (FPTL)
- LeetCode 206. 反转链表
- 代码不是重点, 领悟OO思想(一)
- nand flash 原理简介
- Java中的生产消费者问题
- DNS服务器配置图解过程(1)
- idea启动报错: Failed to create JVM.JVM.Path XXXXXXX\jbr\
- 微信商户平台关闭自动提现
- unity粒子系统碰撞
- HCIA笔记-----第二天
- 无法对多重选择区域执行此操作
- GrayWorld 色彩均衡算法
- 海康摄像头字符叠加详解
- 一致性hash算法虚拟节点解决方案
- 德信计算机怎么开音乐,计算机模式识德信别 文献阅读.ppt
- 基于Rsoft进行单模光纤的基模计算
热门文章
- 2012-02-25工作记录
- 不用光驱软驱与U盘,看我如何在IBM X3500 M2服务器上用PE安装Win2K3
- hdu3768 spfa+全排列
- hdu4267线段树段更新,点查找,55棵线段树.
- 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 制作 APK 扩展包 | 上传 APK 扩展包到 Google Play | APK 扩展文件上传时机 )
- 【运筹学】整数规划 ( 整数规划示例 | 整数规划解决的核心问题 )
- 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )
- Android Studio开发配置NDK环境
- unix的sed 用法介绍
- Java编程基础篇第二章