php數(shù)組的遍歷函數(shù)與方法例子
來源:程序員人生 發(fā)布時(shí)間:2014-02-19 18:48:22 閱讀次數(shù):2449次
php中數(shù)組遍歷方法有很多種,如有:for,foreach,while(),list(),each()這些函數(shù)與方法都要我們?cè)跀?shù)組遍歷中會(huì)用到的,下面給大家介紹一下.
1. 使用for語句循環(huán)遍歷數(shù)組
a. 其它語言(只有這一種方式)
b. PHP中這種方式不是我們首選方式
c. 數(shù)組必須是索引數(shù)組,而且下標(biāo)還必須是連續(xù)的 索引數(shù)組下標(biāo)還可以不連序,數(shù)組還有關(guān)聯(lián)數(shù)組)
PHP實(shí)例代碼如下:
- <?php
-
-
-
- $people = Array(
- Array(’name’ => ‘Kalle’, ’salt’ => 856412),
- Array(’name’ => ‘Pierre’, ’salt’ => 215863)
- );
- for($i = 0; $i < sizeof($people); ++$i)
- {
- $people[$i]['salt'] = rand(000000, 999999);
- }
- ?>
以上代碼的問題,在于for的第二個(gè)表達(dá)式會(huì)導(dǎo)致代碼執(zhí)行很慢--因?yàn)槊看窝h(huán)時(shí)都要 計(jì)算一遍數(shù)組的長(zhǎng)度,由于數(shù)組的長(zhǎng)度始終不變,我們可以用一個(gè)中間變量來存儲(chǔ)數(shù)組長(zhǎng)度,然后用這個(gè)變量作為for循環(huán)的第二個(gè)表達(dá)式,這樣在循環(huán)的時(shí)候就可以直接使用該變量的值,不用每次重新計(jì)算,代碼如下:
- <?php
- $people = Array(
- Array(’name’ => ‘Kalle’, ’salt’ => 856412),
- Array(’name’ => ‘Pierre’, ’salt’ => 215863)
- );
- for($i = 0, $size = sizeof($people); $i < $size; ++$i)
- {
- $people[$i]['salt'] = rand(000000, 999999);
- }
- ?>
2.使用foreach語句循環(huán)遍歷數(shù)組
- foreach(數(shù)組變量 as 變量值){
- 循環(huán)體
- }
a.循環(huán)次數(shù)由數(shù)組的元素個(gè)數(shù)決定
b.每一次循環(huán)都會(huì)將數(shù)組中的元素分別賦值給后面變量
- foreach(數(shù)組變量 as 下標(biāo)變量=> 值變量){
- }
foreach遍歷3維數(shù)組:
-
- /*
- $biaoge=array(
- "市場(chǎng)部"=>array(
- array(1,"gaomou1","jingli11",4000),
- array(2,"gaomou2","jingli22",4000),
- array(3,"gaomou3","jingli33",4000)
- ),
- "客服部"=>array(
- array(1,"gao1","li11",4000),
- array(2,"gao2","li22",4000),
- array(3,"gao3","li33",4000)
- ),
- "業(yè)務(wù)部"=>array(
- array(1,"mou1","jing11",4000),
- array(2,"mou2","jing22",4000),
- array(3,"mou3","jing33",4000)
- )
- );
- foreach($biaoge as $key=>$value){
- echo '<table align="center" width="600" border="1">';
- echo '<caption>聯(lián)系表</caption>';
- echo '<tr bgcolor="#dddddd">';
- echo '<th>標(biāo)號(hào)</th><th>名字</th><th>職位</th><th>工資</th></tr>';
- foreach($value as $row){
- if($row%2==0){
- $bg="#ffffff";
- }else{
- $bg="#dddddd";
- }
- echo '<tr bgcolor='.$bg.'>';
- foreach($row as $col){
- echo '<td>'.$col.'</td>';
- }
- echo '</tr>';
- }
- echo '</table>';
- }
- echo "<pre>";
- print_r($biaoge);
- echo "</pre>";
3. while() list() each() 組合循環(huán)遍歷數(shù)組
each()函數(shù).
a. 需要一個(gè)數(shù)組作為參數(shù)
b. 返回來的也是一個(gè)數(shù)組
c. 返回來的數(shù)組是0, 1, key, value四個(gè)下標(biāo)(固定的)
0和key下標(biāo)是當(dāng)前參數(shù)數(shù)組元素的?
1和value下標(biāo)是當(dāng)前對(duì)數(shù)數(shù)組元素的值
d. 默認(rèn)認(rèn)當(dāng)前元素就是第一個(gè)元素
e. 每執(zhí)行一次后就會(huì)將當(dāng)前元素向后移動(dòng)
f. 如果到最后的元素再執(zhí)行這個(gè)函數(shù),則返回false
使用each遍歷數(shù)組的示例代碼如下:
- <?php
-
- $arrGoogle=array('google','Gmail','Chrome','Android');
-
- $arrG=each($arrGoogle);
-
- print_r($arrG);
- print '<br>';
- $arrGmail=each($arrGoogle);
- print_r($arrGmail);
- print '<br>';
- $arrChrome=each($arrGoogle);
- print_r($arrChrome);
- print '<br>';
- $arrAndroid=each($arrGoogle);
- print_r($arrAndroid);
- print '<br>';
-
- $empty=each($arrGoogle);
-
- if($empty==false){
- print '指針以位于數(shù)組末尾,無法在向后移,故返回false';
- }
- ?>
注意:該函數(shù)的參數(shù)和返回值(在執(zhí)行該函數(shù)前指針不位于數(shù)組末尾時(shí))都為數(shù)組,在執(zhí)行函數(shù)前數(shù)組指針位于數(shù)組末尾時(shí)再次執(zhí)行該函數(shù)返回值為false,開始的位置是第一個(gè)元素,每(正常)執(zhí)行一次該函數(shù),指針向后移到下一個(gè)地址.
list()函數(shù)
a. list()=array(); 需要將一個(gè)數(shù)組賦值給這個(gè)函數(shù)
b. 數(shù)組中的元素個(gè)數(shù),要和list()函數(shù)中的參數(shù)個(gè)數(shù)相同
c. 數(shù)組中的每個(gè)元素值會(huì)賦值list()函數(shù)中的每個(gè)參數(shù),list()將每個(gè)參數(shù)轉(zhuǎn)為變量
d. list()只能接收索引數(shù)組
e. 按索引的下標(biāo)的順序
這不是真正的函數(shù),而是PHP的語言結(jié)構(gòu),list()用一步操作給一組變量進(jìn)賦值,即把數(shù)組中的值賦給一些變量,list()僅能用于數(shù)字索引的數(shù)組并假定數(shù)字索引從0開始,語法格式如下所示:
list(mixed varname,mixed ...)=array_expression //list()語句的語法格式
list()語句和其它函數(shù)在使用上有很大的區(qū)別,并不是直接接收一個(gè)數(shù)組作為參數(shù),而是通過“=”去處符以賦值的方式,將數(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;
- echo "$drink is $color and $power makes it special.n";
-
- list($drink, ,$power)=$info;
- echo "$drink has $power.n";
-
- list(,,$power)=$info;
- echo "I need $power!n";
- ?>
通過上例了解list()函數(shù)的用法之后,將each()函數(shù)和list()函數(shù)結(jié)合起來使用,代碼如下:
- <?php
- $contact=array("ID"=>1,"姓名"=>"高某","公司"=>"A公司","地址"=>"北京市");
- list($key,$value)=each($contact);
- echo "$key=>$value";
- ?>
while() 函數(shù)
while()循環(huán)的語法格式如下:
- while( list($key,$value) = each(array_expressin) ){
- 循環(huán)體;
- }
使用這種組合改寫前面使用foreach遍歷過的一維數(shù)組,代碼如下所示:
- <?php
-
- $contact=array("ID"=>1,
- "姓名"=>"高某",
- "公司"=>"A公司",
- "地址"=>"北京市",
- "電話"=>"(010)987665432",
- "EMAIL"=>"gao@php.com"
- );
-
- echo '<dl>一個(gè)聯(lián)系人信息:';
- while(list($key,$value) = each($contact) ){
- echo "<dd>$key:$value</dd>";
- }
- echo '</dl>';
- ?>
while() 遍歷數(shù)據(jù)是需要結(jié)合list或each函數(shù)配置才可以遍歷,否則它單獨(dú)是無法完成數(shù)組遍歷的.
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)