目錄
foreach()
使用陣列鍵值
提示
多維數組" >遍歷多維數組
延伸預讀
for() 迴圈遍歷數組
首頁 後端開發 php教程 如何用foreach和for進行數組迴圈遍歷

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

Jun 22, 2017 pm 03:04 PM
foreach 循環 陣列 進行

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 />';
}
?>
登入後複製

執行此範例輸出:

18
20
25
登入後複製
登入後複製

使用陣列鍵值

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

執行範例輸出:

wang: 18
li: 20
zhang: 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);
?>
登入後複製

運行範例輸出:

28
30
35
Array ( [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);
?>
登入後複製

運行範例輸出:

18
20
25
Array ( [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 />';
    }
}
?>
登入後複製

執行此範例輸出:

18
20
小张
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 />";
}
?>
登入後複製

運行範例輸出如下:

18
20
25
登入後複製
登入後複製

提示

也可以用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;
    }
}
登入後複製

以上是如何用foreach和for進行數組迴圈遍歷的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? 如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? Apr 27, 2024 am 11:33 AM

如何使用 foreach 迴圈移除 PHP 陣列中的重複元素?

PHP 陣列鍵值翻轉:不同方法的效能比較分析 PHP 陣列鍵值翻轉:不同方法的效能比較分析 May 03, 2024 pm 09:03 PM

PHP 陣列鍵值翻轉:不同方法的效能比較分析

PHP數組深度複製的藝術:使用不同方法完美複製 PHP數組深度複製的藝術:使用不同方法完美複製 May 01, 2024 pm 12:30 PM

PHP數組深度複製的藝術:使用不同方法完美複製

PHP數組多維排序實戰:從簡單到複雜場景 PHP數組多維排序實戰:從簡單到複雜場景 Apr 29, 2024 pm 09:12 PM

PHP數組多維排序實戰:從簡單到複雜場景

PHP 數組分組函數在資料整理的應用 PHP 數組分組函數在資料整理的應用 May 04, 2024 pm 01:03 PM

PHP 數組分組函數在資料整理的應用

深度複製PHP數組的最佳實踐:探索高效的方法 深度複製PHP數組的最佳實踐:探索高效的方法 Apr 30, 2024 pm 03:42 PM

深度複製PHP數組的最佳實踐:探索高效的方法

Java函數中遞歸呼叫有哪些替代方案? Java函數中遞歸呼叫有哪些替代方案? May 05, 2024 am 10:42 AM

Java函數中遞歸呼叫有哪些替代方案?

PHP 陣列分組函數在尋找重複元素中的作用 PHP 陣列分組函數在尋找重複元素中的作用 May 05, 2024 am 09:21 AM

PHP 陣列分組函數在尋找重複元素中的作用

See all articles