1. foreach()
foreach()是一個用來遍歷陣列中資料的最簡單有效的方法。
#example1:
<?php $colors= array('red','blue','green','yellow'); foreach ($colorsas$color){ echo "Do you like $color? <br />"; } ?>
# 顯示結果:
Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?
while() 通常和list(),each()搭配使用。
#example2:
<?php $colors= array('red','blue','green','yellow'); while(list($key,$val)= each($colors)) { echo "Other list of $val.<br />"; } ?>
顯示結果:
Other list of red.
Other list of blue.
Other list of green.
Other list of yellow.
#example3:
<?php $arr= array ("0"=> "zero","1"=> "one","2"=> "two"); for ($i= 0;$i< count($arr); $i++){ $str= $arr[$i]; echo "the number is $str.<br />"; } ?>
##顯示結果:the number is zero.
the number is one.
the number is two.
<?php $capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix"); echo "<p>Can you name the capitals of these states?</p>"; while($key= key($capitals)) { echo $key."<br />"; next($capitals); //每个key()调用不会推进指针。为此要使用next()函数 } ?>
Ohio
Towa
Arizona
<?php $colors= array('red','blue','green','yellow'); foreach ($colorsas$color){ echo "Do you like $color? <br />"; } reset($colors); while(list($key,$val)= each($colors)) { echo "$key=> $val<br />"; } ?>
顯示結果:
##Do you like red?
Do you like blue?Do you like green?
Do you like yellow?
0 => red
1 => blue
2 => green
3 => yellow
注意:將一個數組賦值給另一個數組時會重置原來的數組指針,因此在上例中如果我們在循環內部將$colors 賦給了另一個變量的話將會導致無限循環。
while循環
內,再執行程式碼,瀏覽器就會無止盡地顯示結果。 each()
each()函數傳回輸入陣列目前鍵/值對,並將指標推進一個位置。傳回的陣列包含四個鍵,鍵0和key包含鍵名,而鍵1和value包含對應的資料。如果執行each()前指標位於陣列結尾,則傳回FALSE。
#example6
<?php $capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix"); $s1= each($capitals); print_r($s1); ?>
#顯示結果:
Array ( [1] => Columbus [value] => ; Columbus [0] => Ohio [key] => Ohio )
current(),next(),prev(),end()
current()函數傳回位於target_
array陣列目前指標位置的陣列值。與next()、prev()、和end()函數不同,current()不移動指標。 next()函數傳回緊接著放在目前陣列指標的下一個位置的陣列值。 prev()函數傳回位於目前指標的前一個位置的陣列值,如果指標本來就位於陣列的第一個位置,則傳回FALSE。
end()函數將指標移向target_array的最後一個位置,並傳回最後一個元素。
#example7
<?php $fruits= array("apple","orange","banana"); $fruit= current($fruits); //return "apple" echo $fruit."<br />"; $fruit= next($fruits); //return "orange" echo $fruit."<br />"; $fruit= prev($fruits); //return "apple" echo $fruit."<br />"; $fruit= end($fruits); //return "banana" echo $fruit."<br />"; ?>
# 顯示結果:
apple
orangeapple
banana
=========== 下面來測試三種遍歷陣列的速度===========
一般情況下,遍歷一個陣列有三種方法,for、while、foreach。其中最簡單方便的是foreach。以下先讓我們來測試一下共同遍歷一個有50000個下標的
一維數組Intel Core Due2 2GHz2GB 1067MHz DDR3
Mac OS X 10.5.7
Apache 2.0.59
MySQL 5.0.41
PHP 5.2 .6
#example8
<?php $arr= array(); for($i= 0; $i< 50000; $i++){ $arr[]= $i*rand(1000,9999); } function GetRunTime() { list($usec,$sec)=explode(" ",microtime()); return ((float)$usec+(float)$sec); } ###################################### $time_start= GetRunTime(); for($i= 0; $i< count($arr); $i++){ $str= $arr[$i]; } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo 'Used time of for:'.round($time_used, 7).'(s)<br /><br />'; unset($str, $time_start, $time_end, $time_used); ###################################### $time_start= GetRunTime(); while(list($key, $val)= each($arr)){ $str= $val; } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo 'Used time of while:'.round($time_used, 7).'(s)<br /><br />'; unset($str, $key, $val, $time_start, $time_end, $time_used); ###################################### $time_start= GetRunTime(); foreach($arr as$key=> $val){ $str= $val; } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo 'Used time of foreach:'.round($time_used, 7).'(s)<br /><br />'; ?>
測試結果:
Used time of for:0.0228429(s)
Used time of while:0.0544658(s)
Used time of foreach:0.0085628(s)
經過反覆多次測試,結果表明,對於遍歷同樣一個數組,foreach速度最快,最慢的則是while。從原理上來看,foreach是對數組副本進行操作(透過拷貝數組),而while則透過移動數組內部指標進行操作,一般邏輯下認為,while應該比foreach快(因為foreach在開始執行的時候首先把數組複製進去,而while直接移動內部指標。原因應該是,foreach是PHP內部實現,而while是通用的循環結構。所以,在通常應用中foreach簡單,而且效率高。在PHP5下,foreach還可以遍歷類別的屬性。
以上是php遍歷數組的函數及其用法匯總的詳細內容。更多資訊請關注PHP中文網其他相關文章!