网站地图    收藏   

主页 > php专栏 > php数组查询 >

php 数组遍历性能的比较 - php数组

来源:自学PHP网    时间:2014-11-25 21:17 作者: 阅读:

[导读] for循环只对数字索引有限,for和foreach遍历结束后不需要对数据进行reset()操作即可供下次遍历,而each方法则需要,代码如下:?php//a$arr=array(#39;a#39;=#39;abc#39;,#39;b#39;=123,#39;c......

php 数组遍历性能的比较

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

  1. <?php 
  2. //a 
  3. $arr=array('a'=>'abc','b'=>123,'c'=>true); 
  4. //b 
  5. //$arr=range('a','d'); 
  6.  
  7. //1    
  8. for($i=0;$i<sizeof($arr);$i++) 
  9.     echo $arr[$i].', '
  10. echo '<br />'
  11.  
  12. //2 
  13. foreach($arr as $key
  14.     echo "$key, "
  15. echo '<br />'
  16.  
  17. //3 
  18. foreach($arr as $key=>$val
  19.     echo "$key-$val, "
  20. echo '<br />'
  21.  
  22. //4 
  23. reset($arr); 
  24. while($item=each($arr)){ 
  25.     echo $item['key'].'-'.$item['value'].', '
  26. }//开源代码phpfensi.com 
  27. echo '<br />'
  28.  
  29. //5 
  30. reset($arr); 
  31. while(list($key,$val)=each($arr)){ 
  32.     echo "$key-$val, "
  33. echo '<br />'
  34. ?> 

使用语句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进行初始化得到关联数组,输出如下:

  1. a, b, c, d, 
  2. a, b, c, d, 
  3. 0-a, 1-b, 2-c, 3-d, 
  4. 0-a, 1-b, 2-c, 3-d, 
  5. 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是通用的循环结构.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论