php 数组遍历性能的比较

for循环只对数字索引有限;for和foreach遍历结束后不需要对数据进行reset()操作即可供下次遍历,而each方法则需要

<?php教程
//a
$arr=array('a'=>'abc','b'=>123,'c'=>true);
//b
//$arr=range('a','d');

//1   
for($i=0;$i<sizeof($arr);$i++)
    echo $arr[$i].', ';
echo '<br />';

//2
foreach($arr as $key)
    echo "$key, ";
echo '<br />';

//3
foreach($arr as $key=>$val)
    echo "$key-$val, ";
echo '<br />';

//4
reset($arr);
while($item=each($arr)){
    echo $item['key'].'-'.$item['value'].', ';
}
echo '<br />';

//5
reset($arr);
while(list($key,$val)=each($arr)){
    echo "$key-$val, ";
}
echo '<br />';
?>使用语句a $arr=array('a'=>'abc','b'=>123,'c'=>true); 对$arr进行初始化得到数字索引数组,输出如下:

, , ,
abc, 123, 1,
a-abc, b-123, c-1,
a-abc, b-123, c-1,
a-abc, b-123, c-1, 使用语句b $arr=range('a','d'); 对$arr进行初始化得到关联数组,输出如下:

a, b, c, d,
a, b, c, d,
0-a, 1-b, 2-c, 3-d,
0-a, 1-b, 2-c, 3-d,
0-a, 1-b, 2-c, 3-d,

经过反复多次测试,结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。foreach比while大约快20% ~ 30%左右。随后再把数组下标增加到500000、5000000测试结果也一样。但从原理上来看,foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。原因应该是,foreach是PHP内部实现,而while是通用的循环结构

 

时间: 2024-10-22 11:44:48

php 数组遍历性能的比较的相关文章

php数组遍历

1, B=>1, C=>1, D=>1); foreach($array as $key => $value){ if($key == B){ $array[A] = CHANGE; $array[D] = CHANGE; print_r($array); echo ' '; } //如果想要打印CHNAGE,那么可以使用 //if($array[$key] == 'CHANGE') //上面的取出的才是数组实际元素的值,使用$value取出的是array数组的原始值的副本 if(

java数组遍历 删除remove(示例代码)_java

废话不多说,直接上代码 复制代码 代码如下: package com.b; import java.util.ArrayList; //数组遍历删除,添加 public class Core2 {     private String name;     private int num;     private String color;     public Core2() {     }     public Core2(String a, int b, String c) {       

IE8对JS通过属性和数组遍历解析不一样的地方探讨_javascript技巧

以文谨记在此被浏览器版本差异的坑. 复制代码 代码如下: Array.prototype.Contains = function (str) { if (!str) return false; for (var i = 0; i < this.length; i++) { if (this[i] == str) { return true; } } return false; } var tmp = new Array(); tmp.push("1"); tmp.push(&qu

asp.net C#数组遍历、排序、删除元素、插入、随机元素

asp教程.net c#数组遍历.排序.删除元素.插入.随机元素 数组遍历 short[] sts={0,1,100,200}; for(int i=0;i<sts.lenght;i++) {   if(sts[i]>50)  {   .....   } } 数组随机元素 public  hashtable  noorder(int count)         {             arraylist mylist = new arraylist();             hash

PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)_php实例

一.数组遍历的3个方法介绍 1. foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. #example1: 复制代码 代码如下: <?php $colors= array('red','blue','green','yellow'); foreach ($colorsas$color){ echo "Do you like $color? <br />"; } ?> 显示结果: Do you like red? Do you li

jquery进行数组遍历如何跳出当前的each循环_jquery

最近在忙着进行官网改版,在做其中的一个项目时碰到了一个小问题.问题是这样的,通过 jquery 的循环方法进行数组遍历,但是当不符合条件时,怎么跳出当前循环. 我是使用 $.each() 进行数组循环遍历,但是当进入判断时,不清楚该如何跳出当前循环,于是我就用 javascript 的方法--continue 发现并不正确.API 上的说明只有跳出整个循环(如果需要退出 each 循环可使回调函数返回 false,其它返回值将被忽略.) 后来上网查了下,得到了结果: return false;-

JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍_javascript技巧

•原理: •高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: •forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: •数组中有几项,那么传递进去的匿名回调函数就需要执行几次: •每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input: •理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行

PHP 数组遍历foreach语法结构及实例_php实例

foreach() PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误. 语法: foreach (array as $value) statement // 或者: foreach (array as $key => $value) statement 上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步.在第二种语法格式中还将当前单元的键名也会在每次

Angular ng-repeat 对象和数组遍历实例_AngularJS

直接上代码 <!DOCTYPE html> <html> <head> <meta name="description" content="[Ngrepeat in obj and arr]"> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.min.js"></script