PHP循環(huán)遍歷數(shù)組的3種方法list()、each()和while總結(jié)
①each()函數(shù)
each()函數(shù)需要傳遞一個(gè)數(shù)組作為參數(shù),返回?cái)?shù)組中當(dāng)前元素的鍵/值對(duì),并向后移動(dòng)數(shù)組指針到下一個(gè)元素的位置。鍵/值對(duì)被返回帶有4個(gè)元素的關(guān)聯(lián)和索引混合的數(shù)組,鍵名分別為0、1、key和value。其中鍵名0和key對(duì)應(yīng)的值是一樣的,是數(shù)組元素的鍵名,1和value則包含有數(shù)組元素的值。如果內(nèi)部指針越過(guò)了數(shù)組的末端,則each()返回FALSE。each()函數(shù)的使用如下所示:
<?php $contact = array("ID" => 1,"姓名" => "高某","公司" => "A公司","地址" => "北京市",); $id = each($contact); //返回?cái)?shù)組$contact中第一個(gè)元素的鍵/值對(duì),是帶有4個(gè)元素的數(shù)組 print_r($id); //輸出數(shù)組$id:Array([1]=>1,[value]=>1,[0]=>ID,[key]=>ID) $name = each($contact); //返回?cái)?shù)組$contact中的第二個(gè)元素的鍵/值對(duì),是帶有4個(gè)元素的數(shù)組 print_r($name); //輸出Array([1]=>高某,[value]=>高某,[0]=>姓名,[key]=>姓名) $company = each($contact); print_r($company); //輸出Array([1]=>A公司,[value]=>A公司,[0]=>公司,[key]=>公司) $address = each($contact); print_r($address); //輸出Array([1]=>北京市,[value]=>北京市,[0]=>地址,[key]=>地址) $no = each($contact); var_dump($no); //輸出bool(false) ?>
PHP中的each();能夠枚舉所有的數(shù)組值,而list()就從each()中的第0元素下標(biāo)開(kāi)始讀取數(shù)據(jù),如:
<?php $url=array('百度=>'www.baidu.com', '新浪網(wǎng)'=>'www.sina.com', '搜狐'=>'www.sohu.com' ); while(list($a,$b)=each($url)) echo "$a=$b <br/>"; ?>
說(shuō)明:each()函數(shù)用于返回當(dāng)前指針位置的數(shù)組值,并將指針推進(jìn)一個(gè)位置。返回?cái)?shù)組包含四個(gè)鍵,鍵0和key包含鍵名,而鍵1和value包含相應(yīng)的數(shù)據(jù)。如果程序在執(zhí)行each()函數(shù)時(shí)指針已經(jīng)位于數(shù)組末尾,則返回false.
②list()函數(shù)
list() 函數(shù)用數(shù)組中的元素為一組變量賦值。
注意,與 array() 類(lèi)似,list() 實(shí)際上是一種語(yǔ)言結(jié)構(gòu),不是函數(shù)。
語(yǔ)法
list(var1,var2...)
參數(shù) | 描述 |
---|---|
var1 | 必需。第一個(gè)需要賦值的變量。 |
var2 | 可選??梢杂卸鄠€(gè)變量。 |
提示和注釋
注釋?zhuān)涸摵瘮?shù)只用于數(shù)字索引的數(shù)組,且假定數(shù)字索引從 0 開(kāi)始。
<?php $my_array = array("Dog","Cat","Horse"); list($a, $b, $c) = $my_array; echo "I have several animals, a $a, a $b and a $c."; ?>
從以上例可以看出list()不能直接讀出form表單傳遞的數(shù)據(jù),因?yàn)楸韱螖?shù)據(jù)不是數(shù)字索引,用的是變量名稱(chēng)索引,如pwd="123",pwd是索引,而123是值,,需要借助each()來(lái)建立數(shù)字索引才能賦值給list()函數(shù)。而array()是標(biāo)準(zhǔn)數(shù)組這個(gè)就不介紹了。
這不是真正的函數(shù),而是PHP的語(yǔ)言結(jié)構(gòu)。list()用一步操作給一組變量進(jìn)行賦值,即把數(shù)組中的值賦給一些變量。list()僅能用于數(shù)字索引的數(shù)組并假定數(shù)組索引從0開(kāi)始。語(yǔ)法格式如下所示:
list(mixed varname,mixed…) = array_expression
list()語(yǔ)句和其他函數(shù)在使用上有很大的區(qū)別,并不是直接接收一個(gè)數(shù)組作為參數(shù)。而是通過(guò)“=”運(yùn)算符以賦值的方式,將數(shù)組中的每一個(gè)元素的值,對(duì)應(yīng)的賦給list()函數(shù)中的每一個(gè)參數(shù)。list()函數(shù)又將它中的每個(gè)參數(shù)轉(zhuǎn)換為直接可以在腳本中使用的變量。使用方式如下:
<?php $info = array('coffee','brown','caffeine'); list($drink,$color,$power) = $info; list($drink,,$power) = $info; //變量的值是數(shù)組中第一個(gè)和第三個(gè)值 list( , ,$power) = $info; //變量值是數(shù)組中第三個(gè)元素的值 ?>
通過(guò)上例了解list()函數(shù)的用法之后,將each()函數(shù)和list()函數(shù)結(jié)合起來(lái)使用。代碼如下所示:
<?php $contact = array("ID" => 1,"姓名" => "高某","公司" => "A公司","地址" => "北京市",); list($key,$value) = each($contact); echo "$key => $value"; //輸出變量$key和$value,中間使用“=>”分割 ?>
③while循環(huán) 遍歷數(shù)組
前面介紹的each()和list()語(yǔ)句的使用,就不難理解如果使用while循環(huán)遍歷數(shù)組了。使用的語(yǔ)法格式如下所示:
while(list($key,$value) = each(array_expression)){ 循環(huán)體 }
這種聯(lián)合體的格式遍歷給定的array_expression數(shù)組。在while()語(yǔ)句每次循環(huán)中,each()語(yǔ)句將當(dāng)前數(shù)組元素的鍵,賦給list()函數(shù)的第一個(gè)參數(shù)變量$key。并將當(dāng)前數(shù)組元素中的值,賦給list()函數(shù)中的第二個(gè)參數(shù)變量$value,并且each()語(yǔ)句執(zhí)行之后還會(huì)把數(shù)組內(nèi)部的指針向后移動(dòng)一步,因此下次while()語(yǔ)句循環(huán)時(shí),將會(huì)得到該數(shù)組中下一個(gè)元素的鍵/值對(duì)。直到數(shù)組的結(jié)尾each()語(yǔ)句返回FALSE,while()語(yǔ)句停止循環(huán),結(jié)束數(shù)組的遍歷。
<?php $contact = array( "ID" => 1, "姓名" => "高某", "公司" => "A公司", "地址" => "北京市", "電話(huà)" => "(010)98765432", "EMAIL" => "gao@brophp.com", ); //以HTML列表的方式輸出數(shù)組中每個(gè)元素的信息 echo '<dl>一個(gè)聯(lián)系人信息:'; while(list($key,$value) = each($contact)){ echo "<dd>$key : $value</dd>"; } echo '</dl>'; ?>
也可以是喲on個(gè)同樣的方式嵌套遍歷多維數(shù)組。雖然while遍歷數(shù)組的結(jié)果和freach語(yǔ)句相同,但這兩種方法是有區(qū)別的。在使用while語(yǔ)句遍歷數(shù)組之后,each()語(yǔ)句已經(jīng)將傳入的數(shù)組參數(shù)內(nèi)部指針指向了數(shù)組末端。當(dāng)再次使用while語(yǔ)句遍歷同一個(gè)數(shù)組時(shí),數(shù)組指針已經(jīng)在數(shù)組的末端,each()語(yǔ)句直接返回FALSE,while語(yǔ)句不會(huì)被執(zhí)行循環(huán)。只有在while語(yǔ)句執(zhí)行之前調(diào)用reset()函數(shù),重新將數(shù)組指針指定第一個(gè)元素。而foreach語(yǔ)句會(huì)自動(dòng)重置數(shù)組的指針位置,當(dāng)foreach開(kāi)始執(zhí)行時(shí),數(shù)組內(nèi)部的指針會(huì)自動(dòng)指向第一個(gè)單元。這意味著不需要在foreach循環(huán)前調(diào)用reset()函數(shù)。
相關(guān)文章
php設(shè)計(jì)模式之迭代器模式實(shí)例分析【星際爭(zhēng)霸游戲案例】
這篇文章主要介紹了php設(shè)計(jì)模式之迭代器模式,結(jié)合星際爭(zhēng)霸游戲案例形式分析了PHP迭代器模式相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04ThinkPHP公共配置文件與各自項(xiàng)目中配置文件組合的方法
這篇文章主要介紹了ThinkPHP公共配置文件與各自項(xiàng)目中配置文件組合的方法,涉及array_merge函數(shù)將多個(gè)數(shù)組合并的方法,是ThinkPHP項(xiàng)目開(kāi)發(fā)中非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11php頁(yè)面跳轉(zhuǎn)session cookie丟失導(dǎo)致不能登錄等問(wèn)題的解決方法
thinkphp開(kāi)發(fā)的一個(gè)項(xiàng)目,登錄成功后又跳轉(zhuǎn)到登錄頁(yè)面,在提交信息后輸出session都是正常的,沒(méi)有問(wèn)題,但是頁(yè)面跳轉(zhuǎn)后,session出現(xiàn)丟失現(xiàn)象,無(wú)法正常完成登陸,下面通過(guò)本文給大家解答下2016-12-12Yii2 批量插入、更新數(shù)據(jù)實(shí)例
這篇文章主要介紹了Yii2 批量插入、更新數(shù)據(jù)實(shí)例的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-032017年最好用的9個(gè)php開(kāi)發(fā)工具推薦(超好用)
對(duì)于php初學(xué)者不知道哪個(gè)php開(kāi)發(fā)工具好用,下面小編給大家分享2017年最好用的9個(gè)php開(kāi)發(fā)工具推薦,感興趣的朋友一起看看吧2017-10-10php中的explode()函數(shù)實(shí)例介紹
在本篇文章里小編給大家分享了關(guān)于php中的explode()函數(shù)實(shí)例知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-01-01php無(wú)限級(jí)分類(lèi)實(shí)現(xiàn)評(píng)論及回復(fù)功能
這篇文章主要為大家詳細(xì)介紹了php無(wú)限級(jí)分類(lèi)實(shí)現(xiàn)評(píng)論及回復(fù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02