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'].', ';
- }//開源代碼Vevb.com
- 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是通用的循環結構.
新聞熱點
疑難解答