首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 多維陣列遍歷兩種實用方法詳解

     編輯:PHP 綜合知識

處理多維陣列是 PHP 開發常見需求。本文介紹兩種遍歷多維陣列的方法:巢狀 foreach 迴圈與遞迴函式,並提供程式碼範例供參考。

方法一:巢狀 foreach 迴圈

適用於已知固定層級(如二維)的陣列。外層迴圈取得鍵值,內層判斷值是否為陣列,若是則再次迴圈輸出。

$a = array(
    'fruits'  => array('a' => 'orange', 'b' => 'grape', 'c' => 'apple'),
    'numbers' => array(1, 2, 3, 4, 5, 6),
    'holes'   => array('first', 5 => 'second', 'third')
);

foreach ($a as $key => $val) {
    if (is_array($val)) {
        foreach ($val as $k => $v) {
            echo "Key: $k
Value: $v
"; } } }

方法二:遞迴函式將多維陣列扁平化

適用於層級不固定、深度未知的陣列。函式 MulitarraytoSingle 透過遞迴將所有值收集到一維陣列 $temp 中。

function MulitarraytoSingle($array) {
    static $temp = array(); // 使用 static 保持跨呼叫狀態
    if (is_array($array)) {
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                MulitarraytoSingle($value);
            } else {
                $temp[] = $value;
            }
        }
    }
    return $temp;
}

// 使用範例
$multi = array(
    'level1' => array('a', 'b', array('c', 'd')),
    'level2' => array('e', 'f')
);
$result = MulitarraytoSingle($multi);
print_r($result);

補充說明

  • 原文第二個範例的 $temp 未宣告為 static,導致遞迴時無法累積結果;上方已修正。
  • PHP 5.5+ 可使用 array_walk_recursive 更簡潔地達成相同目的:
    array_walk_recursive($array, function($v) use (&$out) { $out[] = $v; });
  • 若需保留鍵名關係,可改用 RecursiveIteratorIterator 搭配 RecursiveArrayIterator。

掌握這兩種遍歷方式,能靈活應對不同結構的多維陣列處理需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved