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