for循環(huán)只對數(shù)字索引有限,for和foreach遍歷結(jié)束后不需要對數(shù)據(jù)進(jìn)行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進(jìn)行初始化得到數(shù)字索引數(shù)組,輸出如下:
, , ,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進(jìn)行初始化得到關(guān)聯(lián)數(shù)組,輸出如下:
- 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,
經(jīng)過反復(fù)多次測試,結(jié)果表明,對于遍歷同樣一個數(shù)組,foreach速度最快,最慢的則是while。foreach比while大約快20% ~ 30%左右,隨后再把數(shù)組下標(biāo)增加到500000、5000000測試結(jié)果也一樣,但從原理上來看,foreach是對數(shù)組副本進(jìn)行操作(通過拷貝數(shù)組),而while則通過移動數(shù)組內(nèi)部指標(biāo)進(jìn)行操作,一般邏輯下認(rèn)為,while應(yīng)該比foreach快(因為foreach在開始執(zhí)行的時候首先把數(shù)組復(fù)制進(jìn)去,而while直接移動內(nèi)部指標(biāo)。),但結(jié)果剛剛相反,原因應(yīng)該是,foreach是PHP內(nèi)部實現(xiàn),而while是通用的循環(huán)結(jié)構(gòu).
新聞熱點
疑難解答