for foreach while性能比较

一般情况下,遍历一个数组有三种方法,for、while、foreach。其中最简单方便的是foreach。那么它们在操作和性能上存在什么差别,通常使用那种方法比较好。
下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间;

测试平台:
CPU:2.6 GHz Intel Core i5
内存:8 GB 1600 MHz DDR3
硬盘:256 SSD
OS:OS X El Capitan
WEB:Apache/2.4.16 (Unix) php 5.4

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
/**
 * Created by PhpStorm.
 * User: shiwuhao
 * Date: 15/11/12
 * Time: 17:05
 */




$arr = array();

for($i = 0; $i < 50000; $i++) {
    $arr[] =  $i * rand(1000,9999);
}


/**
 * for
 */

$str = '';
$start_time = getRunTime();

for($i = 0; $i < count($arr); $i++) {
    $str .= $arr[$i];
}

$end_time = getRunTime();
$time_used = $end_time - $start_time;

echo 'for : '.$time_used.'<br />';

unset($start_time, $end_time, $str, $time_used);

/**
 * while
 */

$str = '';
$start_time = getRunTime();

while(list($key, $val) = each($arr)) {
    $str .= $val;
}

$end_time = getRunTime();
$time_used = $end_time - $start_time;

echo 'while : '.$time_used.'<br />';

unset($start_time, $end_time, $str, $time_used);


/**
 * foreach
 */

$str = '';
$start_time = getRunTime();

foreach ($arr as $k => $v) {
    $str .= $v;
}

$end_time = getRunTime();
$time_used = $end_time - $start_time;

echo 'foreach : '.$time_used.'<br />';

unset($start_time, $end_time, $str, $time_used);



/**
 * 获取执行时间
 * @return float
 */

function getRunTime()
{

    list($usec,$sec)=explode(" ",microtime());
    return ((float)$usec+(float)$sec);
}

输出结果:

for : 0.050076007843018
while : 0.066652059555054
foreach : 0.012237071990967

结果表明,对于遍历同样一个数组,foreach速度最快,最慢的则是while。