php array walk 效率,php代码优化系列(二) -- array_walk 和 foreach, for 的效率的比较...
实验是我学习计算机科学的一个重要方法,计算机科学不是简单的智力游戏,它本质上来说不是一门科学,而是一个改造世界的工具。数学方法和实验方法是计算机研究的基本方法,也是我们学习的基本方法,数学锻炼我们的思维能力,实验锻炼我们的操作能力,解决实际问题的能力。我们每天的工作都应该看做是一次实验,要从每天的工作中,总结出对我们来说有用的东西。比如要写好php代码,一个很重要的东西就是效率,效率高不高,我们就要做实验。下面是我对php中的几个数组循环处理方法的评测,测试的代码很简单:
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,最好的直接把代码写在循环里面。
再自己加点:
foreach是最快的,因为php的array内部元素之间有指针,就是list,直接指向下个元素的内存地址,所以遍历速度很快 for的问题在于,每次都要做一个hash table的查询。 array_walk/array_map 遍历的方式和foreach一样的,慢是慢在回调函数
php array walk 效率,php代码优化系列(二) -- array_walk 和 foreach, for 的效率的比较...相关推荐
- php代码优化 -- array_walk 和 foreach, for 的效率的比较
<?php /*** array_walk 和 foreach, for 的效率的比较.* 我们要测试的是foreach, for, 和 array_walk的效率的问题. *///产生一个10 ...
- 短信开发系列(二):GSM手机短信开发之短信解码
短信开发系列目录: 短信开发系列(一):GSM手机短信开发初探 短信开发系列(二):GSM手机短信开发之短信解码 短信开发系列(三):短信接收引擎 昨天写了短信的发送,今天我们在来谈谈如果读取SIM卡 ...
- [知识库分享系列] 二、.NET(ASP.NET)
最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...
- 【C++自我精讲】基础系列二 const
[C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...
- PyTorch系列 (二): pytorch数据读取自制数据集并
PyTorch系列 (二): pytorch数据读取 PyTorch 1: How to use data in pytorch Posted by WangW on February 1, 2019 ...
- SAP License:雾里看花系列——合理的机制才能让系统效率最大
"SAP权限管理"小伙伴你们好.又是几天没见,很是想念你们,2021年已过半年,最近一直忙着计划和预算的事情,总算是忙完了.结果还要设计出绩效责任书便于对各个部门的考核,不过还好总 ...
- Quantopian 入门系列二 - 流水线 (下)
本文含 8225 字,28 图表截屏 建议阅读 42 分钟 本贴接着上贴[Quantopian 入门系列二 - 流水线 (上)]的内容,讨论下面目录的 5- 8 节: 简介 因子 筛选器 分类器 掩码 ...
- 进入BeOS的花花世界 系列二
进入BeOS的花花世界 系列二 BeOS 完全瞄准多媒体 ⊙记者张子强/专题报导 时间回到西元一九九O,苹果电脑Macintosh 麦金塔刚满六 ...
- 阵列信号DOA估计系列(二).导向矢量与空间FFT(附代码)
阵列信号DOA估计系列(二).导向矢量 在DOA估计里面,经常会看到导向矢量这个名词,也有的地方叫方向矢量,方向矩阵,基本上都是array steering vector 的翻译. 本文首先对均匀线阵 ...
最新文章
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
- 3dsMax插件V-Ray渲染与合成学习课程 3ds Max: Rendering for Compositing in V-Ray Next
- jboss5+EJB3+MDB Queue
- 放弃安卓原生TimePicker,选择wheelView打造更漂亮的时间get,以及动态拉伸输入框布局,这些,这里都有!...
- boost::ignore_unused的用法实例
- 组织在召唤:如何免费获取一个js.org的二级域名
- OpenCV学习(二十) :分水岭算法:watershed()
- java验证cron表达式_cron表达式
- SR-IOV(Single Root I/O Virtualization):将PCIe共享给虚拟机的标准
- 算法竞赛从入门到进阶pdf_【算法趣谈】线段树 从入门到进阶
- 算法:链表实现插入排序Insertion Sort List
- OPC 通讯 Demo
- 【MySQL】MySQL中的死锁
- jQuery的$.ajax()与php后台交互,进行文件上传并保存在指定目录
- KEGG 通路信息下载及其相关处理
- 微信小程序校园介绍板
- ASP.NET4.0尚未在Web服务器上注册
- 在hb中html怎么插图片,WKWebView加载HTML文本(图片自适应)
- 团体程序设计天梯赛--个人总结
- 元胞自动机——应用于森林火灾和传染病场景