第十課:PHP中遍歷數組
上節課我們認識到了數組的優越性,這節課我們將學習怎樣遍歷數組中的數據。這種操作數組方法的應用是非常普遍的,我相信你會掌握得很好。
比如你的網站存有大量的網址數據,你想在一個頁面顯示門戶網站網址,這些數據已經保存到了一個數組變量$url裏,那麼怎樣把這些數據一個一個輸出到網頁裏呢?你還想象上節課那樣一個一個echo輸出嗎?別忘了數據量是非常大而且數據的個數是經常變化的噢。PHP當然會有簡單的辦法,先看一個例子10-1:
foreach
$url = array('新浪'=>'www.sina.com',
'雅虎'=>'www.yahoo.com',
'網易'=>'www.163.com',
'騰訊'=>'www.qq.com',
'百度'=>'www.baidu.com'
);
foreach ( $url as $link ) {
echo $link.'<br><br>';
}
?>
foreach 僅能用於數組,當試圖將其用於其它數據類型或者一個未初始化的變量時會產生錯誤。有兩種語法,第二種比較次要但卻是第一種的有用的擴展。
第一種語法:
foreach (array_expression as $value) statement
這種格式遍歷給定的 array_expression 數組,as 是關鍵詞。每次循環中,當前單元的值被賦給 $value 並且數組內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。statement是後續操作,如果有多個語句,你可以象上例那樣採用大括號包含。
上例中,我們循環讀取數組$url中的每個單元,並且每次都把該單元的值賦值給變量$link,再echo打印輸出這個$link的值,然後再進行下一次循環直到數組中不再有數據。
你動手試了嗎?如果你試了,看到輸出結果是不是覺得很有趣呢?我知道一會兒你就又有疑問了:爲什麼沒有“新浪”“網易”這樣的站名呢?要怎樣做才能得到呢?
在$url數組定義中,“新浪”“網易”等都是作的鍵名而不是數組的值,我們的第一種語法只是循環取得數組中每個值。如果要得到數組的鍵名,可以採用第二種語法:
第二種語法:
foreach (array_expression as $key => $value) statement
第二種格式做同樣的事,只除了當前單元的鍵值也會在每次循環中被賦給變量 $key。
例如10-2:
$url = array('新浪'=>'www.sina.com',
'雅虎'=>'www.yahoo.com',
'網易'=>'www.163.com',
'騰訊'=>'www.qq.com',
'百度'=>'www.baidu.com'
);
foreach ( $url as $site => $link ) {
echo "<a href=http://$link>$site</a><br><br>";
}
?>
$url = array('新浪'=>'www.sina.com',
'雅虎'=>'www.yahoo.com',
'網易'=>'www.163.com',
'騰訊'=>'www.qq.com',
'百度'=>'www.baidu.com'
);
$n = 0;
foreach ( $url as $site => $link ) {
++$n ;
echo "第 $n 名:<a href=http://$link>$site</a><br><br>";
}
?>
注: 此外注意 foreach 所操作的是指定數組的一個拷貝,而不是該數組本身。因此即使有 each() 的構造,原數組指針也沒有變,數組單元的值也不受影響。
注: foreach 不支持用“@”來禁止錯誤信息的能力。