array_walk 和 foreach, for 的效率的比较

通过小程序,判断array_walk 和 foreach, for的效率,通过小程序发现如下结果:

1、foreach的效率明显高于for,说明php对foreach函数进行了优化,如果同事可以采用for和foreach的地方,建议采用foreach。

2、如果循环内要调用函数,用array_walk  最好.

<?php
/**
 * array_walk 和 foreach, for 的效率的比较。
 * 我们要测试的是foreach, for, 和 array_walk的效率的问题。
 */

//产生一个10000的一个数组。
$max = 1000000;
$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.348432064056

使用for 并且直接对数组进行了操作 花费: 0.493929862976

使用for 调用函数对数组操作 花费 : 1.49323606491

使用 foreach 没有对数组操作 花费 : 0.33071398735

使用 foreach 直接对数组操作 : 0.337166070938

使用 foreach 调用函数对数组操作 : 1.13249397278

使用 array_walk 花费 : 1.2829349041

时间: 2024-08-09 21:19:17

array_walk 和 foreach, for 的效率的比较的相关文章

分享php工作中遇到的一些探究和技巧【1】

一 foreach的引用 $arr = range(1,3); //[1,2,3] foreach($arr as &$val) { } foreach($arr as $val) { } print_r($arr); 上面的代码会输出什么? Array ( [0] => 1 [1] => 2 [2] => 2 ) 这是因为foreach的源代码中,对变量进行了引用.导致其作用之后,将地址赋值于最后一个 例: tmp是var的引用,指向的是var的存储空间,当tmp改变的时候,v

Java Foreach语句使用总结

foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本. foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为"foreach"语句.从英文字面意思理解foreach也就是"for 每一个"的意思.实际上也就是这个意思. foreach的语句格式

foreach的真面目

在遍历数组的时候,我们一般使用一般的for循环.增强的for循环,在遍历集合的时候,我们一般使用一般的for循环.增强的for循环.迭代器,当然除了这些我们还可以使用我们的工具类,Arrays和collections来遍历:但是今天我们的"猪脚"是增强for循环,也就是foreach循环. 我们分别看下foreach在数组和在集合遍历的时候,两者有什么区别: 1.在集合中: a:先看下源码: public class Demo { public static void main(Str

合并_01php基础语法(8days)笔记

一.入门指引 1.php是什么? PHP是什么? Hypertext Preprocessor,超文本预处理器 Personal Home Page,个人主页 是一种在服务器端执行的脚本语言,可嵌入到 HTML中,尤其适合 web 开发. ? php可以做什么? 网站,web程序 B/S架构 ? ? 命令行脚本 桌面应用程序 ? ? 二.安装Apache 制作一台服务器,来提高网页服务,只要安装了一个能提供网页服务的软件的电脑,就可以称之为网页服务器. 常见的网页服务器软件 Apache IIS

第一周Java基础课程学的知识。

二进制能够被CPU识别的二进制命令就是指令程序(软件)指令的有序集合计算机语言指的是人与计算机沟通的工具机器语言:指的是全部由二进制代码组成的语言.在很早的时候使用的就是机器语言.汇编语言高级语言:特点:第一特点,不用太过关心计算机底层的实现原理.2更加接近自然语言.3.开发者可以更加关注功能实现.Java sun被Oracle收购.创始人 James Grascing Java平台:分三个部分1 JAVASE标准版,必要的功能都包含在里面 2JAVAEE企业版,他的基础仍然是标准版写好的代码去

Java 经典问题

九种基本类型及封装类 基本类型 boolean byte char short int long double void 二进制位数 1 8(一字节) 16(2字节) 16(2字节) 32(4字节) 64(8字节) 64(8字节) -- 封装器类 Boolean Byte Character Short Integer Long Double Void switch语句后的控制表达式只能是short.char.int.long整数类型和枚举类型,不能是float,double和boolean类型

C#中的集合类——HashTable

HashTable 被称为键值对集合,类似于字典,根据key可以找到value 键值对对象[键]=值;键值对集合当中,键必须是唯一的,而值是可以重复的 1. HashTable的用法 //创建了一个键值对集合对象 Hashtable ht = new Hashtable(); ht.Add(1, "张三"); ht.Add(2, true); ht.Add(3, '男'); ht.Add(false, "错误的"); ht.Add(5, "张三"

PHP底层的运行机制与原理

PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可以把它认为是一个强大的UI框架. 了解PHP底层实现的目的是什么?动态语言要像用好首先得了解它,内存管理.框架模型值得我们借鉴,通过扩展开发实现更多更强大的功能,优化我们程序的性能. 1. PHP的设计理念及特点 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全

VSTO学习笔记(七)基于WPF的Excel分析、转换小程序

原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然后进行转换. 概述 小程序主界面如下: 首先选择一个日期和类别,从命名上对待分析的Excel文件进行过滤.点击[浏览]选择待分析的Excel文件所在的目录, 程序中会获取所有子目录.然后点击[执行分析]就会按照左边CheckBox中的选择进行分析,分析结果显示在每一行中间.[修改配置]可以对分析规则