在網站建設中的$products數組中,允許PHP為每個元素指定一個默認的索引。這就意味著,所添加的第一個元素為元素0,第二個為元素1等。PHP還支持相關數組。在相關數組中,可以將每個變量值與任何關鍵字或索引關聯起來。
【示例1】創(chuàng)建一個以產品名稱作為關鍵字、以價格作為值的相關數組。代碼如下:
$prices = array("Tires" =>100, "Oil"=>10, "Spark Plugs"=>4);
關鍵字和值之間的符號只是一個在大于號之前的等于符號。同樣,可以使用變量名稱和關鍵字來訪問數組的內容,因此就可以通過如下方式訪問保存在prices數組中的信息。
$prices["Tires"];$prices["Oil"];$prices["Spark Plugs"];
【示例2】創(chuàng)建一個與$prices數組相同的數組。這種方法并不是創(chuàng)建一個具有3個元素的數組,而是創(chuàng)建一個只有一個元素的數組,然后再加上另外兩個元素。代碼如下:$prices = array("Tires" =>100);$prices["Oil"] = 10;$prices["Spark Plugs"] = 4;與下面這段代碼有些不同,但其功能與以上代碼是等價的。在這種方法中,并沒有明確地創(chuàng)建一個數組。數組是在向這個數組加入第一個元素時創(chuàng)建的。$prices["Tires"] = 100;$prices["Oil"] = 10;$prices["Spark Plugs"] = 4;因為相關數組的索引不是數字,因此無法在for循環(huán)語句中使用一個簡單的計數器對數組進行操作。但是可以使用foreach循環(huán)或list()和each()結構。當使用foreach循環(huán)語句對相關數組進行操作時,foreach循環(huán)具有不同的結構??梢栽谇懊娴睦又惺褂眠@個循環(huán)語句,也可以按如下方式使用關鍵字。foreach( $prices as $key => $value) echo $key.'=>'.$value.'<br />';【示例3】也可以使用each()打印$prices數組的內容,代碼如下:while($element = each($prices)){ echo $element['key']; echo '=>'; echo $element['value']; echo '<br />'; }each()函數能夠返回數組的當前元素,并將下一個元素作為當前元素。因為在while循環(huán)中調用each()函數,它將按順序返回數組中每個元素,并且當它到達數組末尾時,循環(huán)操作將終止。
在上面這段代碼中,變量$element是一個數組。當調用each()時,它將返回一個帶有4個數值和4個指向數組位置的索引的數組。位置key和0包含了當前元素的關鍵字,而位置value和1包含了當前元素的值。雖然這與選哪一種方法沒什么不同,但選擇了使用命名位置,而不是數字索引位置。
此外,還有一種更為高級和常見的方式來完成相同的操作。函數list()可以用來將一個數組分解為一系列的值??梢园凑杖缦路绞綄⒑瘮礶ach()返回的兩個值分開:list($product, $price) = each($prices);以上代碼使用each()從$prices數組中取出當前元素,并且將它作為數組返回,然后再指向下一個元素。它還使用list()將從each()返回的數組中所包含0、1兩個元素變?yōu)閮蓚€名為$product和$price的新變量??梢匝h(huán)遍歷整個$prices數組,使用如下所示的簡短腳本顯示它的內容:while(list($product, $price) = each($prices)) echo "$product => $price<br />";這段代碼的輸出結果與前面腳本的輸出結果相同,但它更容易閱讀,因為list()允許為新變量命名。需要注意的一點是,當使用each()函數時,數組將記錄當前元素。如果希望在相同的腳本中兩次使用該數組,就必須使用函數reset()將當前元素重新設置到數組開始處。要再次遍歷prices數組,可以使用如下所示的代碼:
reset($prices) ;while(list($product, $price) = each($prices)) echo "$product => $price<br />";
以上代碼可以將當前元素重新設置到數組開始處,再次遍歷數組。