一、遍历
for循环,需要知道数组的长度,从下标0开始,到n-1结束。
数组长度 = count(数组)
//普通数组
$arr = array(1,2,3,4,5,6);
for($i=0;$i<count($arr);$i++){
echo $arr[$i];//123456
}
//关联数组,无法用for循环遍历
$arr = array('name'=>'max','age'=>34,'address'=>'北京');
for($i=0;$i<count($arr);$i++){
echo $arr[$i];//undefind offset 0
}
foreach循环,无需知道数组长度,根据元素在数组中的先后顺序进行。
循环结果与for循环可能出现不一致。
//普通数组
$arr = array(1,2,3,4,5,6);
foreach($arr as $vo){
echo $vo;//123456
}
//关联数组
$arr = array('name'=>'max','age'=>34,'address'=>'北京');
foreach($arr as $key=>$vo){
echo $key;//name,age,address
echo $vo;//max,34,北京
}
普通数组,for循环与foreach循环结果不一致示例
//普通数组
$arr = array();
$arr[1] = 'max';
$arr[] = 'xiaoli';
$arr[0] = 'xiaoming';
$arr[] = 'zhangsan';
//for循环,输出顺序为xiaoming,max,xiaoli,zhangsan
for($i=0;$i<count($arr);$i++){
echo $arr[$i];
}
//foreach循环,输出顺序为max,xiaoli,xiaoming,zhangsan
foreach($arr as $key=> $vo){
echo $vo;
}
哪个速度更快,foreach循环要比for循环更快!
foreach, as key=> k e y => vo模式比 as =>$vo模式要慢
for, i<count( i < c o u n t ( arr)模式比$i<数组长度变量模式要慢
//for循环,最快2.13秒
$len = count($arr);
for($j=0;$j<10000000;$j++){
//耗时2.13秒,每次无需计算数组长度
for($i=0;$i<$len;$i++){
$temp = $arr[$i];
}
}
for($j=0;$j<10000000;$j++){
//耗时3.13秒,每次重新计算数组长度
for($i=0;$i<count($arr);$i++){
$temp = $arr[$i];
}
}
//foreach循环,最快1.29秒
for($j=0;$j<10000000;$j++){
//耗时2.00秒
foreach($arr as $key=> $vo){
$temp = $vo;//123456
}
}
for($j=0;$j<10000000;$j++){
//耗时1.29秒
foreach($arr as $vo){
$temp = $vo;
}
}