確定多維陣列的最大嵌套層級(深度)是資料結構處理的常見需求。本文提供一個簡潔的遞歸函數,透過深度優先遍歷並追蹤最大深度值,適用於任意結構的陣列。
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
$max_depth = 1,代表當前層級。+1 後與當前最大值比較,更新 $max_depth。| 輸入陣列 | 預期深度 | 說明 |
|---|---|---|
[] | 1 | 空陣列仍屬第一層 |
[1, 2, 3] | 1 | 無嵌套 |
[[1], [2]] | 2 | 二維陣列 |
[[[1]]] | 3 | 三層嵌套 |
[1, [2, [3, [4]]]] | 4 | 不規則嵌套,取最深路徑 |
| 文中範例 | 4 | 最深路徑:array → array → array → array("5","6") |
xdebug.max_nesting_level = 256,極深陣列可能觸發錯誤,可用 ini_set('xdebug.max_nesting_level', 1000) 調整。Traversable 介面物件,判斷條件改為 is_array($value) || $value instanceof Traversable。