PHP 数组遍历 foreach 语法结构
來(lái)源:http://www.cnblogs.com/keta/p/6117237.html
foreach 語(yǔ)法結(jié)構(gòu)用于遍歷數(shù)組。
foreach()
PHP foreach() 語(yǔ)法結(jié)構(gòu)用于遍歷操作或輸出數(shù)組,foreach() 僅能用于遍歷數(shù)組或?qū)ο?#xff0c;當(dāng)試圖將其用于其它數(shù)據(jù)類型或者一個(gè)未初始化的變量時(shí)會(huì)產(chǎn)生錯(cuò)誤。
語(yǔ)法:
foreach (array as $value)statement // 或者: foreach (array as $key => $value)statement上述語(yǔ)法中,每次循環(huán)將當(dāng)前單元的值賦給 $value 并且數(shù)組內(nèi)部的指針向前移一步。在第二種語(yǔ)法格式中還將當(dāng)前單元的鍵名也會(huì)在每次循環(huán)中賦給變量 $key。
例子:
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as $age) {echo $age,'<br />'; } ?>運(yùn)行該例子輸出:
18 20 25使用數(shù)組鍵值
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as $key=>$age) {echo $key,': ',$age,'<br />'; } ?>運(yùn)行例子輸出:
wang: 18 li: 20 zhang: 25提示
當(dāng) foreach 開始執(zhí)行時(shí),數(shù)組內(nèi)部的指針會(huì)自動(dòng)指向第一個(gè)單元,這意味著不需要在 foreach 循環(huán)之前調(diào)用 reset()。
foreach 所操作的是指定數(shù)組的一個(gè)拷貝,而不是該數(shù)組本身。對(duì)返回的數(shù)組單元的修改也不會(huì)影響原數(shù)組(見下面例子),但 foreach 循環(huán)運(yùn)行到結(jié)束,原數(shù)組的內(nèi)部指針將指向數(shù)組的結(jié)尾。
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as $age) {$age = $age+10;echo $age,'<br />'; } // 輸出原數(shù)組 print_r($arr_age); ?>運(yùn)行例子輸出:
28 30 35 Array ( [wang] => 18 [li] => 20 [zhang] => 25 )要在 foreach 中修改原數(shù)組元素,可以通過(guò)引用來(lái)實(shí)現(xiàn),將上面的例子更改為:
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as &$age) {$age = $age+10;echo $age,'<br />'; } // 輸出原數(shù)組 print_r($arr_age); ?>運(yùn)行例子輸出:
18 20 25 Array ( [wang] => 28 [li] => 30 [zhang] => 35 )遍歷多維數(shù)組
foreach 語(yǔ)法結(jié)構(gòu)只能用于遍歷一維數(shù)組,要遍歷多維數(shù)組,一般是將 foreach 嵌套遞歸使用或者將原數(shù)組分割為一維數(shù)組再進(jìn)行 foreach 遍歷。
一二維數(shù)組混合的例子:
$arr_age = array("wang"=>18, "li"=>20, "zhang"=>array("name"=>"小張", "age"=>25)); foreach ($arr_age as $age) {if(is_array($age)){foreach ( $age as $detail) {echo $detail,'<br />';}} else {echo $age,'<br />';} } ?>運(yùn)行該例子輸出:
18 20 小張 25對(duì)多維數(shù)組的遍歷處理就要根據(jù)實(shí)際的數(shù)據(jù)結(jié)構(gòu)而采取最合適的處理方式。
延伸預(yù)讀
PHP 數(shù)組是通過(guò)哈希表(HashTable)表實(shí)現(xiàn)的,因此 foreach 遍歷數(shù)組時(shí)是依據(jù)元素添加的先后順序來(lái)進(jìn)行的。如果想按照索引大小遍歷,應(yīng)該使用 for() 循環(huán)遍歷。
for() 循環(huán)遍歷數(shù)組
如果是操作連續(xù)鍵值的數(shù)組,也可以采用 for() 循環(huán)來(lái)遍歷數(shù)組:
<?php $arr_age = array(18, 20, 25); $num = count($arr_age); for($i = 0; $i < $num; $i++){echo $arr_age[$i]."<br />"; } ?>運(yùn)行例子輸出如下:
18 20 25提示
也可以用 list() 和 each() 結(jié)合來(lái)遍歷數(shù)組,但測(cè)試發(fā)現(xiàn)效率不如 foreach() 。
?
//使用array()語(yǔ)句結(jié)構(gòu)將聯(lián)系人列表中所有數(shù)據(jù)聲明為一個(gè)二維數(shù)組,默認(rèn)下標(biāo)是順序數(shù)字索引$contact1 = array( //定義外層數(shù)組 array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子數(shù)組1 array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子數(shù)組2 array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'), //子數(shù)組3 array(4,'書某','D公司','重慶市','(023)13579135','sm@php.com') //子數(shù)組4 ); //以HTML表格的形式輸出二維數(shù)組中的每個(gè)元素 echo '<table border="1" width="600" align="center">'; echo '<caption><h1>聯(lián)系人列表</h1></caption>'; echo '<tr bgcolor="#dddddd">'; echo '<th>編號(hào)</th><th>姓名</th><th>公司</th><th>地址</th><th>電話</th><th>EMALL</th>'; echo '</tr>'; //使用雙層for語(yǔ)句嵌套二維數(shù)組$contact1,以HTML表格的形式輸出 //使用外層循環(huán)遍歷數(shù)組$contact1中的行 for($row=0;$row<count($contact1);$row++) { echo '<tr>'; //使用內(nèi)層循環(huán)遍歷數(shù)組$contact1 中 子數(shù)組的每個(gè)元素,使用count()函數(shù)控制循環(huán)次數(shù) for($col=0;$col<count($contact1[$row]);$col++) { echo '<td>'.$contact1[$row][$col].'</td>'; } echo '</tr>'; } echo '</table>';$contact1 = array(???????????????????????????????????????????? //定義外層數(shù)組
??? array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子數(shù)組1
??? array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子數(shù)組2
??? array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'),? //子數(shù)組3
??? array(4,'書某','D公司','重慶市','(023)13579135','sm@php.com')???? //子數(shù)組4
??? );
foreach($contact1 as $key=>$s){
//echo? $key;//以每個(gè)數(shù)組的鍵值作為表名
foreach($s as $row){
echo? $row;
}
}
總結(jié)
以上是生活随笔為你收集整理的PHP 数组遍历 foreach 语法结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常吃方便面的人体重有什么变化吗?
- 下一篇: 網上賣的肉粽的肉為何這麼硬