如何用foreach和for進行數組迴圈遍曆

來源:互聯網
上載者:User
foreach 文法結構用於遍曆數組。

foreach()

PHP foreach() 文法結構用於遍曆操作或輸出數組,foreach() 僅能用於遍曆數組或對象,當試圖將其用於其它資料類型或者一個未初始化的變數時會產生錯誤。

文法:

foreach (array as $value)    statement// 或者:foreach (array as $key => $value)    statement

上述文法中,每次迴圈將當前單元的值賦給 $value 並且數組內部的指標向前移一步。在第二種文法格式中還將當前單元的鍵名也會在每次迴圈中賦給變數 $key。

例子:

<?php$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);foreach ($arr_age as $age) {    echo $age,'<br />';}?>

運行該例子輸出:

182025

使用數組索引值

<?php$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);foreach ($arr_age as $key=>$age) {    echo $key,': ',$age,'<br />';}?>

運行例子輸出:

wang: 18li: 20zhang: 25

提示

當 foreach 開始執行時,數組內部的指標會自動指向第一個單元,這意味著不需要在 foreach 迴圈之前調用 reset()。

foreach 所操作的是指定數組的一個拷貝,而不是該數組本身。對返回的數組單元的修改也不會影響原數組(見下面例子),但 foreach 迴圈運行到結束,原數組的內部指標將指向數組的結尾。

<?php$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);foreach ($arr_age as $age) {    $age = $age+10;    echo $age,'<br />';}// 輸出原數組print_r($arr_age);?>

運行例子輸出:

283035Array ( [wang] => 18 [li] => 20 [zhang] => 25 )

要在 foreach 中修改原數組元素,可以通過引用來實現,將上面的例子更改為:

<?php$arr_age = array("wang"=>18, "li"=>20, "zhang"=>25);foreach ($arr_age as &$age) {    $age = $age+10;    echo $age,'<br />';}// 輸出原數組print_r($arr_age);?>

運行例子輸出:

182025Array ( [wang] => 28 [li] => 30 [zhang] => 35 )

遍曆多維陣列

foreach 文法結構只能用於遍曆一維數組,要遍曆多維陣列,一般是將 foreach 嵌套遞迴使用或者將原數組分割為一維數組再進行 foreach 遍曆。

一二維數組混合的例子:

$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 />';    }}?>

運行該例子輸出:

1820小張25

對多維陣列的遍曆處理就要根據實際的資料結構而採取最合適的處理方式。

延伸預讀

PHP 數組是通過雜湊表(HashTable)表實現的,因此 foreach 遍曆數組時是依據元素添加的先後順序來進行的。如果想按照索引大小遍曆,應該使用 for() 迴圈遍曆。

for() 迴圈遍曆數組

如果是操作連續索引值的數組,也可以採用 for() 迴圈來遍曆數組:

<?php$arr_age = array(18, 20, 25);$num = count($arr_age);for($i = 0; $i < $num; $i++){    echo $arr_age[$i]."<br />";}?>

運行例子輸出如下:

182025

提示

也可以用 list() 和 each() 結合來遍曆數組,但測試發現效率不如 foreach() 。

//使用array()語句結構將連絡人清單中所有資料聲明為一個二維數組,預設下標是順序數字索引    $contact1 = array(                                             //定義外層數組    array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子數組1    array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子數組2    array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'),  //子數組3    array(4,'書某','D公司','重慶市','(023)13579135','sm@php.com')     //子數組4    );   //以HTML表格的形式輸出二維數組中的每個元素    echo '<table border="1" width="600" align="center">';    echo '<caption><h1>連絡人清單</h1></caption>';    echo '<tr bgcolor="#dddddd">';    echo '<th>編號</th><th>姓名</th><th>公司</th><th>地址</th><th>電話</th><th>EMALL</th>';    echo '</tr>';    //使用雙層for語句嵌套二維數組$contact1,以HTML表格的形式輸出    //使用外層迴圈遍曆數組$contact1中的行        for($row=0;$row<count($contact1);$row++)    {        echo '<tr>';        //使用內層迴圈遍曆數組$contact1 中 子數組的每個元素,使用count()函數控制迴圈次數                for($col=0;$col<count($contact1[$row]);$col++)            {                         echo '<td>'.$contact1[$row][$col].'</td>';            }                 echo '</tr>';    }             echo '</table>';$contact1 = array(                   //定義外層數組    array(1,'高某','A公司','北京市','(010)987654321','gm@Linux.com'),//子數組1    array(2,'洛某','B公司','上海市','(021)123456789','lm@apache.com'),//子數組2    array(3,'峰某','C公司','天津市','(022)24680246','fm@mysql.com'),  //子數組3    array(4,'書某','D公司','重慶市','(023)13579135','sm@php.com')     //子數組4);foreach($contact1 as $key=>$s){//echo  $key;//以每個數組的索引值作為表名    foreach($s as $row){    echo  $row;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.