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是通用的循環結構