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

PHP 遞歸計算多維陣列深度的高效函數

     編輯:PHP 相關知識

確定多維陣列的最大嵌套層級(深度)是資料結構處理的常見需求。本文提供一個簡潔的遞歸函數,透過深度優先遍歷並追蹤最大深度值,適用於任意結構的陣列。

核心函數實現

function array_depth($array) {
    $max_depth = 1; // 至少為 1(頂層)
    foreach ($array as $value) {
        if (is_array($value)) {
            $depth = array_depth($value) + 1; // 子陣列深度 + 1
            if ($depth > $max_depth) {
                $max_depth = $depth;
            }
        }
    }
    return $max_depth;
}

// 測試範例
$array = array(
    array("11"),
    array(),
    array(array(array("5", "6"), "7", "8")),
    array(array(array("5", "6"), "7", "8")),
    "9", "10"
);
echo array_depth($array); // 輸出 4

邏輯逐步拆解

  1. 初始化 $max_depth = 1,代表當前層級。
  2. 遍歷每個元素,若為陣列則遞歸計算其深度。
  3. 子陣列深度 +1 後與當前最大值比較,更新 $max_depth。
  4. 遍歷結束返回最大深度。

測試用例驗證

輸入陣列預期深度說明
[]1空陣列仍屬第一層
[1, 2, 3]1無嵌套
[[1], [2]]2二維陣列
[[[1]]]3三層嵌套
[1, [2, [3, [4]]]]4不規則嵌套,取最深路徑
文中範例4最深路徑:array → array → array → array("5","6")

進階考量

  • 遞歸深度限制:PHP 預設 xdebug.max_nesting_level = 256,極深陣列可能觸發錯誤,可用 ini_set('xdebug.max_nesting_level', 1000) 調整。
  • 非陣列可迭代物件:若需支援 Traversable 介面物件,判斷條件改為 is_array($value) || $value instanceof Traversable。
  • 效能優化:超大陣列可改用迭代器配合顯式堆疊避免遞歸開銷。

實際應用場景

  • JSON 結構驗證:限制 API 輸入的最大嵌套層級防禦 DoS
  • 模板引擎:根據資料深度決定渲染策略
  • 資料遷移:評估舊系統資料結構複雜度
  • 單元測試:斷言序列化/反序列化後結構深度不變
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved