array_map、foreach、for循环处理数组的效率

Jackey PHP 4,138 次浏览 , 没有评论
  1. header('content-type:text/html;charset=utf-8');
  2.  
  3. //生命一个计算脚本运行时间的类
  4. class Timer
  5. {
  6. private $startTime = 0; //保存脚本开始执行时的时间(以微秒的形式保存)
  7. private $stopTime = 0; //保存脚本结束执行时的时间(以微秒的形式保存)
  8.  
  9.  
  10. //在脚本开始处调用获取脚本开始时间的微秒值
  11. function start()
  12. {
  13. $this->startTime = microtime(true); //将获取的时间赋值给成员属性$startTime
  14. }
  15.  
  16.  
  17. //脚本结束处嗲用脚本结束的时间微秒值
  18. function stop()
  19. {
  20. $this->stopTime = microtime(true); //将获取的时间赋给成员属性$stopTime
  21. }
  22.  
  23.  
  24. //返回同一脚本中两次获取时间的差值
  25. function spent()
  26. {
  27. return $this->stopTime - $this->startTime;
  28. }
  29. }
  30.  
  31.  
  32. $timer = new Timer();
  33. $array = range(1, 1000000);
  34.  
  35.  
  36. $timer->start(); //在脚本文件开始执行时调用这个方法
  37. //每个数组的元素都加1
  38. //方法一:array_map
  39. $result = array_map(function ($val) {
  40. return $val + 1;
  41. }, $array);
  42. $timer->stop(); //在脚本文件结束处调用这个方法
  43.  
  44.  
  45. echo "运用array_map处理数组时用了" . $timer->spent() . "秒<br>";
  46.  
  47. $timer->start(); //在脚本文件开始执行时调用这个方法
  48. foreach ($array as $key => &$value) {
  49. $value += 1;
  50. }
  51. $timer->stop(); //在脚本文件结束处调用这个方法
  52.  
  53. echo "运用foreach处理数组时用了" . $timer->spent() . "秒<br>";
  54.  
  55. $timer->start(); //在脚本文件开始执行时调用这个方法
  56. for($i = 0;$i < count($array);$i++){
  57. $array[$i] += 1;
  58. }
  59. $timer->stop(); //在脚本文件结束处调用这个方法
  60. echo "运用for处理数组时用了".$timer->spent()."秒";

执行结果:

运用array_map处理数组时用了0.06812596321106秒
运用foreach处理数组时用了0.038928985595703秒
运用for处理数组时用了0.047605991363525秒

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go