程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php數組的遍歷講解 for foreach list each key

php數組的遍歷講解 for foreach list each key

編輯:關於PHP編程

php數組的遍歷講解

本文主要講解for,foreach,list,each,key,指針操作相關函數,array_flip ,array_reverse,array_walks等函數的對數組的遍歷

1.for循環遍歷數組

for循環是幾乎所有語言都可以用的一種遍歷數組的方式,但是在php語言中for循環不是遍歷數組的首選

一下是for循環實現數組遍歷的示例代碼

<?php

/*

Designed By Androidyue

php中數組的遍歷講解*/

//for 循環遍歷數組

//聲明一個數組並且初始化

$array=array('Google','Chrome','Android','Youtube','Gmail');

//使用for循環遍歷各數組元素,count()用來計算數組的長度

for($i=0;$i<count($array);$i++){

//打印數組的元素的值

echo $array[$i],"<br>";

}

?>

注意:使用for遍歷數組存在以下限制:

a  所遍歷的數組必須是索引數組(即下標為數字的數組),不能是關聯數組(下標為字符串的數組)

如下列代碼

<?php

$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');

for($i=1;$i<=count($arrGoogle);$i++){

echo $arrGoogle[$i];

}

?>

在運行時會報錯,類似於這樣的錯誤Notice: Undefined offset: 1 in D:/phpnow/htdocs/holiday/php_array_visit_summary.php on line 13這說明for不適合用於關聯數組的遍歷

b,for遍歷的數組既要滿足是索引數組,同時下標又要是連續的整數,如果不是連續的整數則會發生提示

如下列代碼

<?php

$array=array(1=>'Google',5=>'Chrome',7=>'Android',9=>'Youtube',12=>'Gmail');

//print_r($array);

 

for($i=0;$i<count($array);$i++){

echo $array[$i],"<br>";

}

?>

這種情況下也會發生提示類似於Notice: Undefined offset: 2 in D:/phpnow/htdocs/holiday/php_array_visit_summary.php on line 10 因此for循環遍歷數組必須是索引數組而且下標必須是連續的。

2.foreach遍歷數組

foreach可以說是php語言單獨為遍歷數組提供的一種方法(其他語言也可能有),這種遍歷方法是php遍歷數組的首選

foreach遍歷時可以是這樣的foreach($array as $key=>$value)包含鍵值元素  也可以是foreach($array as $value)只包含值

foreach($array as $value)示例代碼

<?php

/*

Designed By Androidyue

php中數組的遍歷講解*/

//foreach實現遍歷數組

$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');

//只包含值

foreach($arrGoogle as $value){

echo $value.'<br>';

}

?>

foreach($array as $key=>$value)的代碼示例

<?php

$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');

foreach($arrGoogle as $key=>$value){

echo '第',($key+1),'個數組元素的值是',$value,'<br>';

}

?>

注意以上的$value和$key都是自定義的變量,因此可以根據需要更改成符合自己風格的命名方式

3.使用list函數遍歷數組

list()函數是將數組中的值賦給變量 

標准語法:void list ( mixed varname, mixed ... )

用list實現對數組的遍歷代碼

<?php

//使用list遍歷函數

//$arrGoogle=array('brand'=>'google','email'=>'Gmail','WebBrowser'=>'Chrome','phone'=>'Android');//使用關聯數組不行

$arrGoogle=array('google','Gmail','Chrome','Android');

list($brand,$email,$webBrowser,$phone)=$arrGoogle;

echo $brand,$email,$webBrowser,$phone;

?>

注意:

a  list函數所接受的數組只能是索引數組,不能是關聯數組!如果是關聯數組,則會出現類似 Notice Undefined offset提示

b  如果只是部分取出數組的值,只需 按照這樣的寫法即可,list(,,$chrome,)=$arrGoogle;這樣我們就可以去除chrome的信息,但是注意一定要保證list參數與數組的元素個數相同(所取值前面的個數)

c list函數賦值按索引順序賦值

4.each函數遍歷數組

each函數返回輸入數組的鍵值對

標准語法:array each(array input array)

返回值:返回4個值0,1,key,value;其中0和key包含鍵名,而1和value包含相應的數據

使用each遍歷數組的示例代碼如下:

<?php

//使用each函數遍歷數組

$arrGoogle=array('google','Gmail','Chrome','Android');

//第一次使用each取得當前鍵值對,並且將指針移到下一個位置

$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>';

//當指針位於數組末尾再次執行函數each,如果是這樣再次執行結果返回false

$empty=each($arrGoogle);

//如果指針無法繼續後移返回false

if($empty==false){

print '指針以位於數組末尾,無法在向後移,故返回false';

}

?>

注意:該函數的參數和返回值(在執行該函數前指針不位於數組末尾時)都為數組,在執行函數前數組指針位於數組末尾時再次執行該函數返回值為false

       開始的位置是第一個元素,每(正常)執行一次該函數,指針向後移到下一個地址

5.key()遍歷數組

each是用來返回數組的鍵名

基本語法:mixed key ( array &array )

key函數遍歷數組示例代碼如下

<?php

//Designed By Androidyue

//使用key函數遍歷數組

//初始化一個關聯數組

$arrChina=array('a'=>'Hebei','b'=>'Anhui','c'=>'Beijing','d'=>'Guangdong','e'=>'Shanghai');

//初始化一個索引數組   但是索引數組使用key返回的是空字符產

$arrCN=array('Hebei','Anhui','Beijing','Guangdong','Shanghai');//key顯示的是數組的字符串下標,如果為索引數組則為空字符串

//print_r($arrChina);

while($key=key($arrChina)){//對於關聯數組使用key方法可以執行

echo $key,'<br>';

next($arrChina);

}

print_r($arrCN);//輸出一下索引數組

while($keyName=key($arrCN)){//這裡調用key函數賦值後為false,while條件不成立,不進行{}之間的操作

/*if(empty($keyName)){

print '該鍵名為空<br>';

}*/

/*if($keyName=''){

print '該鍵名為空<br>';

}*/

var_dump($keyName);

}

//驗證對索引數組使用key函數的返回值賦值給變量這個表達式的布爾值

if(($KeyName=key($arrCN))==false){

print 'False';

}

//對索引數組調用key函數對變量賦值

$keyName=key($arrCN);

next($arrCN);//將數組指針向後移動一位

next($arrCN);

next($arrCN);

next($arrCN);

next($arrCN);

$keyName=key($arrCN);

var_dump($keyName);//輸出值和類型類型信息

//echo $keyName;

?>

注意:key函數的參數一般為關聯數組,如果為索引數組那麼就沒有什麼意義了

key函數不會推進指針移動,這裡我們調用了next函數,next函數用來推進指針向後移動,下面就是next函數的介紹

6.使用對指針進行操作的函數遍歷數組

a reset函數  用於將指針設置回數組的初始位置,如果需要在一個腳本中多次查看和處理一個數組,就可以使用這個函數,另外這個函數還常用於排序的結束

b.current() 函數

返回當前當前數組指針位置的值,該函數不對指針進行移動操作,需要注意這個特點

c end 將指針移到數組的最後位置,返回目標位置的值

d next 將指針向後移動一次並返回目標位置的數組值,如果當前位置為數組的最後位置,返回false

e prev 將指針向前移動一次,並返回目標位置的數組值,如果當前位置是數組起始位置,則返回false

<?php

//Designed By Androidyue

//reset方法的使用  注意以下代碼調用了控制指針的函數,移動指針的操作會影響到each函數的結果

//初始化一個數組,為了簡寫代碼,聲明一個簡單的數組

$arrGoogle=array('google','Gmail');

//調用each函數,並且輸出返回數組 換行

echo(current($arrGoogle));//使用current函數,打印出當前的值

echo (next($arrGoogle));//調用next函數,打印下一個的值

$arrG=each($arrGoogle);

print_r($arrG);

print '<br>';

$arrGmail=each($arrGoogle);

print_r($arrGmail);

print '<br>';

$arrMore=each($arrGoogle);//當指針無法繼續移動時返回false

//print_r($arrMore);

//echo $arrMore;

print '<br>';

//但是如果想繼續輸出使用重復上面的過程,那麼使用reset函數將指針重置為開始位置,然後重復上面的的操作

reset($arrGoogle);

echo(end($arrGoogle));//調用end函數將指針移到數組最後一個位置,並返回值

echo(prev($arrGoogle));//調用prev函數將指針向前移動,並返回值

$arrG=each($arrGoogle);

print_r($arrG);

print '<br>';

$arrGmail=each($arrGoogle);

print_r($arrGmail);

print '<br>';

?>

7.array_reverse()

該函數是將目標數組元素逆置,如果設置preserver_key為true,則保持原先的映射,否則重置映射

該函數使用示例代碼如下

<?php

$arrGoogle=array('Google','Gmail','Android','Chrome','Youtube');

echo '<pre>';

print '進行操作之前的數組';

print_r($arrGoogle);

$arrReversed=array_reverse($arrGoogle);//不保留先前映射

print '未開啟preserve_key 進行逆序操作後的結果';

print_r($arrReversed);

$arrReversedT=array_reverse($arrGoogle,1);//保留先前映射

print '開啟preserver_key 進行逆序操作的結果';

print_r($arrReversedT);

echo'</pre>';

?>

8.array_flip()

該函數是將數組的鍵和值互換

下面是該函數的使用代碼

<?php

//array_flip()函數的使用

//初始化一個索引數組

$arrGoogle=array('Google','Chrome');

//初始化一個關聯數組

$arrSohu=array('son'=>'Sogou','child'=>'Chinaren','search'=>'Sogou');//如果存在值相同調用array_flip()函數會按照順序將相同的值覆蓋掉,如'son'=>'Sogou'和'search'=>'Sogou'值相同,使用array_flip()函數後,為[Sogou] => search

//對兩個數組調用array_flip()函數進行操作並輸出,都可以正常輸出

print_r(array_flip($arrGoogle));

print '<br>$arrSogou未進行array_flip()函數操作之前的數組';

print_r($arrSohu);

print '<br>$arrSogou未進行array_flip()函數操作之後的數組';

print_r(array_flip($arrSohu));

?>

9.array_walk函數

boolean array_walk(array input_array,callback function[,mixed userdata])

array_walk()函數是將參數數組array_input中的每個元素傳遞給自定義的函數function 中,進行相關的操作,如果想真正修改array_input的鍵值對則需要將每個鍵值對作為引用傳遞給函數

自定義函數必須接受兩個輸入參數,第一個是數組的當前值,第二個是數組的當前鍵,,如果調用array_walk函數給出第三個值userdata,他的第三個值將作為第三個參數傳遞給自定義函數。

<?php

//Designed By Androidyue

//array_walk函數的使用

//初始化一個數組

$arrCorperate=array('移動','聯通','電信');

/*

功能:一個拼接字符串的函數,將數組中的值和用戶輸入的參數(如果無參數輸入拼接默認參數值)

參數:$value(自定義),存放數組中的值,$key存放數組中的鍵,$prefix可選參數,用戶需要通過設置array_walk()的第三個參數給它賦值,如果用戶無賦值,使用默認,或者根據需要取捨  

注意:如果用戶使用了引用傳值,那麼數組的值要改變 

*/

function linkString(&$value,$key,$prefix='cn'){

$value=$prefix.$value;//函數體實現字符串拼接

}

array_walk($arrCorperate,'linkString');//使用array_walk()對該數組按照自定義函數操作

//array_walk($arrCorperate,'linkString','中國');//這裡傳第三個三處對自定義函數設置參數

print_r($arrCorperate)

?>

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved