php list、each函數(shù)遍歷數(shù)組
我們來(lái)研究?jī)蓚€(gè)比較有趣的陣列函數(shù)。這兩個(gè)函數(shù)學(xué)起來(lái)不難。但是,有些同學(xué)會(huì)遇到一點(diǎn)點(diǎn)小困難。困難在於,找出list函數(shù)和each函數(shù)的操作特點(diǎn)。
list函數(shù)
#我們先來(lái)講list函數(shù):
list ( mixed $變數(shù)1 [, mixed $變數(shù)n ] )
它的功能:將索引數(shù)組下標(biāo)示為0的對(duì)應(yīng)我變數(shù)1,下標(biāo)1的對(duì)應(yīng)變數(shù)2,依此類(lèi)推。
我們來(lái)透過(guò)實(shí)驗(yàn)來(lái)看一下:
<?php list($one , $two , $three) = array('張三' ,'李四' ,'王五'); //再次聲明:?jiǎn)我?hào)不結(jié)釋變量,所以輸出的是字符串$one echo '$one----'.$one.'<br />'; echo '$two----'.$two.'<br />'; echo '$three----'.$three.'<br />'; ?>
我們來(lái)看看實(shí)驗(yàn)結(jié)果:
分析結(jié)果如圖:
結(jié)論:
????1.將下標(biāo)為0的張三賦值為了$one
????2.將下標(biāo)為1的李四賦值給了$two
????3.將下標(biāo)為2的王五賦值給了$three
因此,我們知道了list的功能就是從左到右,一一對(duì)應(yīng)索引數(shù)組從0開(kāi)始的下標(biāo)值。
list的另一個(gè)用法:
<?php list( , , $three) = array('張三' ,'李四' ,'王五'); echo '$one----'.$one.'<br />'; echo '$two----'.$two.'<br />'; echo '$three----'.$three.'<br />'; ?>
運(yùn)行結(jié)果:
#結(jié)論:
????1.list當(dāng)中的第一、二放變數(shù)的地方留空,我只寫(xiě)了$three。
????2.依照一一對(duì)應(yīng)原則,張三和李四沒(méi)有變數(shù)可以對(duì)應(yīng)。
????3.所以只有王五有變數(shù)對(duì)應(yīng)
請(qǐng)嚴(yán)格記?。核饕嚵械囊灰粚?duì)應(yīng)原則。 list第一個(gè)變數(shù)對(duì)應(yīng)的是下標(biāo)為0的陣列元素,下標(biāo)為1的對(duì)應(yīng)的是list裡面的第二個(gè)陣列元素。
請(qǐng)猜猜看下面的結(jié)果是多少? 為什麼?
<?php list($one, $two, $three) = array(2 => '張三', '李四', '王五'); echo '$one----' . $one . '<br />'; echo '$two----' . $two . '<br />'; echo '$three----' . $three . '<br />'; ?>
運(yùn)行結(jié)果如下圖:
總結(jié):
????1.因?yàn)閷?duì)應(yīng)原則,$one找不到下標(biāo)示為0的陣列元素,$two找不到下標(biāo)為1的陣列元素,只有$three找到了下標(biāo)為2的陣列元素
????3.在list($one, $two, $ three),我只寫(xiě)了三個(gè)變數(shù)。對(duì)應(yīng)完成,無(wú)需再對(duì)應(yīng)後面的變數(shù)了,丟棄李四和王五。
each函數(shù)
each 函數(shù)的規(guī)律性上面就更有特點(diǎn)了,並且比較有趣。
array each ( array &$array )
功能:傳入一個(gè)陣列。它會(huì)將其中的一個(gè)元素拆為個(gè)新數(shù)組。每次執(zhí)行這樣操作一個(gè)元素。執(zhí)行一次先後移動(dòng)一次,同樣的方式操作下一個(gè)陣列元素。執(zhí)行到最後,返回false。
我們先來(lái)看看each是怎麼操作的陣列元素。
<?php //定義一個(gè)變量叫$kongjie(空姐) $kongjie=[ 'gao'=>'穿黑衣服的', 'shou'=>'退特別長(zhǎng)特別細(xì)', 'mei'=>'好白', 'pl'=>'五官端正', 'type'=>'那就是女神', '我是吊絲不敢跟女神搭訕' ]; //第一次each $data = each($kongjie); echo '<pre>'; var_dump($data); echo '</pre>'; ?>
我們來(lái)看看第一次執(zhí)行each的結(jié)果:
#總結(jié):
1.讀取了$kongjie中的第一個(gè)元素,將第一個(gè)元素('gao'=>'穿黑衣服的')分解開(kāi)了。
????1分解後第一個(gè)元素變成了新陣列。
????2在新數(shù)組裡面,將原值(穿黑衣服的)放了索引下標(biāo)1裡面,同時(shí)放到了關(guān)聯(lián)下標(biāo)value裡面。
????3在新陣列裡面,將原鍵(gao),放到了關(guān)聯(lián)下標(biāo)key裡面,放到了索引下標(biāo)0裡面。
我們用圖來(lái)表示:
這樣我們一下子就看明白了。
接下來(lái)我們說(shuō)each的另外一個(gè)特性。讀一次,向後移動(dòng)一個(gè)元素。
<?php //定義一個(gè)變量叫$kongjie(空姐) $kongjie=[ 'gao'=>'穿黑衣服的', 'shou'=>'退特別長(zhǎng)特別細(xì)', 'mei'=>'好白', ]; //第一次each $data = each($kongjie); echo '<pre>'; var_dump($data); echo '</pre>'; echo '-----華麗麗分割線------<br />'; //第2次each $data = each($kongjie); echo '<pre>'; var_dump($data); echo '</pre>'; echo '-----華麗麗分割線------<br />'; //第3次each【執(zhí)行到了最后一個(gè)元素了】 $data = each($kongjie); echo '<pre>'; var_dump($data); echo '</pre>'; echo '-----華麗麗分割線------<br />'; //第4次【此時(shí),后面已沒(méi)有可操作的元素了,看返回什么】 $data = each($kongjie); echo '<pre>'; var_dump($data); echo '</pre>'; echo '-----華麗麗分割線------<br />'; ?>
執(zhí)行結(jié)果:
總結(jié):
????1.讀一次向後移動(dòng)一次【可以想像有一個(gè)記錄的箭頭在移動(dòng)】,將其中的每個(gè)元素拆解成一個(gè)新數(shù)組
????2.讀取到最後,沒(méi)有可操作的元素了,所以返回了false。
list 和each 配合
我們知道了list的特性,也知道了each的特性。那list是不是可以跟each配合起來(lái)一起完成一些工作呢?
list($key,$value) = each($array);
我們來(lái)看之前說(shuō)到的這個(gè)圖:
而list中的第一個(gè)變數(shù)會(huì)去找索引下面0的元素去賦值,第二個(gè)變數(shù)會(huì)找索引下標(biāo)為1的元素對(duì)變數(shù)賦值。
我們來(lái)看看下面範(fàn)例:
<?php //定義一個(gè)變量叫$kongjie(空姐) $kongjie=[ 'gao'=>'穿黑衣服的', 'shou'=>'腿特別長(zhǎng)特別細(xì)', 'mei'=>'好白', ]; list($key,$value) = each($kongjie); echo $key. '-----' .$value .'<br />'; ?>
運(yùn)行結(jié)果如下:
#總結(jié):
????1.each把變數(shù)拆成了4個(gè)元素
????2.而list把0 =>gao 賦值給了變數(shù)$key
????3.list把1 => 穿黑衣服的賦值給了變數(shù)$value
each到最後會(huì)回傳false,因此我可以用布林型迴圈while來(lái)配合完成陣列的迴圈。
把上面的程式碼,輕輕一改就實(shí)現(xiàn)瞭如下效果:
<?php //定義一個(gè)變量叫$kongjie(空姐) $kongjie=[ 'gao'=>'穿黑衣服的', 'shou'=>'退特別長(zhǎng)特別細(xì)', 'mei'=>'好白', ]; while(list($key,$value) = each($kongjie)){ echo $key. '-----' .$value .'<br />'; } ?>
執(zhí)行示範(fàn):
<?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','妖人'), ), ); ?>遍歷顯示出來(lái),效果如下: