天天看點

PHP 周遊數組的方法彙總

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:

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:

$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.

========= 以下是函數介紹 ==========

mixed key(array input_array)

key()函數傳回input_array中位于目前指針位置的鍵元素。

#example4

$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()函數

Can you name the capitals of these states? 

Ohio 

Towa 

Arizona

mixed reset(array input_array)

reset()函數用來将input_array的指針設定回數組的開始位置。如果需要在一個腳本中多次檢視或處理同一個數組,就經常使用這個函數,另外這個函數還常用于排序結束時。

#example5 - 在#example1上追加代碼

reset($colors);

echo "$key=> $val<br />";

Do you like yellow? 

0 => red 

1 => blue 

2 => green 

3 => yellow

注意:将一個數組指派給另一個數組時會重置原來的數組指針,是以在上例中如果我們在循環内部将 $colors 賦給了另一個變量的話将會導緻無限循環。 

例如将 $s1 = $colors; 添加到while循環内,再次執行代碼,浏覽器就會無休止地顯示結果。

array each(array input_array)

each()函數傳回輸入數組目前鍵/值對,并将指針推進一個位置。傳回的數組包含四個鍵,鍵0和key包含鍵名,而鍵1和value包含相應的資料。如果執行each()前指針位于數組末尾,則傳回FALSE。

#example6

$s1= each($capitals);

print_r($s1);

Array ( [1] => Columbus [value] => Columbus [0] => Ohio [key] => Ohio )

mixed current(array target_array)

current()函數傳回位于target_array數組目前指針位置的數組值。與next()、prev()、和end()函數不同,current()不移動指針。 

next()函數傳回緊接着放在目前數組指針的下一個位置的數組值。 

prev()函數傳回位于目前指針的前一個位置的數組值,如果指針本來就位于數組的第一個位置,則傳回FALSE。 

end()函數将指針移向target_array的最後一個位置,并傳回最後一個元素。

#example7

$fruits= array("apple","orange","banana");

$fruit= current($fruits); //return "apple"

echo $fruit."<br />";

$fruit= next($fruits); //return "orange"

$fruit= prev($fruits); //return "apple"

$fruit= end($fruits); //return "banana"

apple 

orange 

banana

=========== 下面來測試三種周遊數組的速度 ===========

一般情況下,周遊一個數組有三種方法,for、while、foreach。其中最簡單友善的是foreach。下面先讓我們來測試一下共同周遊一個有50000個下标的一維數組所耗的時間。

測試環境: 

Intel Core Due2 2GHz 

2GB 1067MHz DDR3 

Mac OS X 10.5.7 

Apache 2.0.59 

MySQL 5.0.41 

PHP 5.2.6

#example8

$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++){

$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);

while(list($key, $val)= each($arr)){

$str= $val;

echo 'Used time of while:'.round($time_used, 7).'(s)<br /><br />';

unset($str, $key, $val, $time_start, $time_end, $time_used);

foreach($arr as$key=> $val){

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還可以周遊類的屬性。

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/