php ?foreach遍歷關(guān)聯(lián)數(shù)組
foreach的基本語(yǔ)法
我們通過上一章的內(nèi)容學(xué)會(huì)了遍歷連續(xù)下標(biāo)的索引數(shù)組??墒?,我們發(fā)現(xiàn)我們遍歷不了關(guān)聯(lián)數(shù)組,也遍歷不了下標(biāo)不連續(xù)的索引數(shù)組。
那我們其實(shí)在學(xué)循環(huán)的時(shí)候,有一個(gè)布爾型循環(huán)是專門用來循環(huán)數(shù)組的。這個(gè)循環(huán)的基本語(yǔ)法就是foreach基本語(yǔ)法。
語(yǔ)法格式如下:
foreach( 要循環(huán)的數(shù)組變量 as [鍵變量 =>] 值變量){ //循環(huán)的結(jié)構(gòu)體 }
遍歷關(guān)聯(lián)數(shù)組
這是一個(gè)固定用法,將要循環(huán)的數(shù)組放進(jìn)去。
as 是一個(gè)固定的關(guān)鍵字
后面的鍵變量是可選的,隨意定義一個(gè)變量,每次循環(huán)的時(shí)候,foreach這個(gè)語(yǔ)法會(huì)把鍵取出來賦值到鍵變量里面
后面的值變量是必填的。每次循環(huán)的時(shí)候,會(huì)把值放到值變量里面。
我們下面用代碼來舉例子,加強(qiáng)對(duì)這個(gè)語(yǔ)法的理解。
<?php $data = [ 'fj' => '鳳姐', 'fr' => '芙蓉', ]; foreach($data as $key => $value){ echo $key . '-------' . $value . '<br />'; } //如果我們只想讀取值的話,就可以把下面的$key => 給刪除掉,讀取的時(shí)候,就只讀取值了。做完上面的實(shí)驗(yàn),你可以打開下面的代碼再實(shí)驗(yàn)幾次。 /* foreach($data as $value){ echo $value . '<br />'; } */ ?>
我們運(yùn)行一下看看結(jié)果:
通過上面的運(yùn)行結(jié)果我們得出下面的結(jié)果:
????1.每次循環(huán)的時(shí)候,把下標(biāo)賦值給了變量$key,把值的變量賦值給了變量$value
????2.循環(huán)一次讀一次鍵和值。如上例中,讀完“鳳姐”再讀取“芙蓉”,讀到最后,發(fā)現(xiàn)沒有可以讀取的數(shù)組元素后,停止循環(huán)遍歷數(shù)據(jù)。
注意:$key 和$value并不是變量名必須得為這兩個(gè)名字。你命名為其他的也可以,如 $kai => $wen是一樣的。 你要清楚鍵賦值給了哪個(gè)變量,值賦值給了另外的哪個(gè)變量。
遍歷索引數(shù)組
foreach還挺好學(xué)的。因此,我們可以通過foreach遍歷連續(xù)的索引數(shù)組,如下例:
<?php $data = array( 0 => '中國(guó)', 100 => '美國(guó)', 20 => '韓國(guó)', 300 => '德國(guó)', ); //待會(huì)兒可以自己做做實(shí)驗(yàn),循環(huán)遍歷一下下面的這個(gè)數(shù)組 //$data = array(1,2,3,4,5,6,7,8,9,10); foreach($data as $k => $v){ echo $k . '------' . $v .'<br />'; } ?>
運(yùn)行看一下結(jié)果:
按照foreach的結(jié)果推理與剛剛做的關(guān)聯(lián)數(shù)組的結(jié)果是一樣的。
不同的是不連續(xù)的索引數(shù)組。每讀一次數(shù)組的元素,將當(dāng)次循環(huán)的下標(biāo)賦值給了變量$k,值賦值給了變量$v。每讀將鍵和值輸出,然后顯示出來。循環(huán)一次向后移動(dòng)一次下標(biāo)。讀取至最后,退出執(zhí)行。
遍歷多維數(shù)組
數(shù)組當(dāng)中還有一個(gè)數(shù)組我們?cè)撛趺幢闅v呢?我們來做一個(gè)實(shí)驗(yàn):
<?php $data = array( 0 => array( '中國(guó)' => 'china', '美國(guó)' => 'usa', '德國(guó)' => ' Germany', ), 1 => array( '湖北' => 'hubei', '河北' => 'hebei', '山東' => 'shandong', '山西' => 'sanxi', ), ); //注:我們?cè)谑褂胒oreach循環(huán)時(shí),第一次循環(huán)將鍵為0和鍵為1的兩個(gè)數(shù)組賦值給一個(gè)變量($value)。然后,再套一個(gè)循環(huán)遍歷這個(gè)$value變量,$value中的值取出來,賦值給$k和$v。 foreach($data as $value){ //第一次循環(huán)把國(guó)家的數(shù)組賦值給了$value //第二次循環(huán)把中國(guó)的省份的數(shù)組又賦值給了$value //因此,我在循環(huán)的時(shí)候把$value再遍歷一次 foreach($value as $k => $v){ echo $k . '-----' . $v .'<br />'; } //為了看的更清晰,我在中間加上華麗麗的分割線方便你來分析 echo '----------分割線-----------<br />'; } ?>
結(jié)果就出來了喲:
總結(jié):
第一次循環(huán)的時(shí)候,將數(shù)組賦值給了$value,然后用foreach循環(huán)$value。將二維的子數(shù)組中的鍵給到$k,值賦值給變量$v。
第一次循環(huán)退出子數(shù)組的循環(huán),執(zhí)行后續(xù)代碼顯示分割線。
依此類推,第二次循環(huán)也是這樣。
作業(yè)
將如下數(shù)組:
<?php $arr=array( '教學(xué)部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('張某','21','妖人'), ), '宣傳部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('張某','21','妖人'), ), '財(cái)務(wù)部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('張某','21','妖人'), ), ); ?>
遍歷顯示出來,效果如下:
總結(jié):
????1.第一次循環(huán)的時(shí)候,將數(shù)組賦值給了$value,然后用foreach循環(huán)$value。將二維的子數(shù)組中的鍵給到$k,值賦值給變量$v。
????2.第一次循環(huán)退出子數(shù)組的循環(huán),執(zhí)行后續(xù)代碼顯示分割線。
????3.依此類推,第二次循環(huán)也是這樣。