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

PHP 判斷陣列維度:一維、二維、多維陣列檢測函式

     編輯:PHP 綜合知識

遞迴檢測陣列深度

PHP 陣列可任意巢狀,判斷維度需遞迴遍歷所有元素,記錄最大深度。

通用函式 arrayLevel()

<?php
/**
 * 回傳陣列的維度(深度)
 * @param array $arr 待檢測陣列
 * @return int 最大維度,純標量回傳 0
 */
function arrayLevel($arr) {
    $levels = [0]; // 收集所有分支深度
    
    // 內部遞迴函式,使用引用傳遞 $levels 累積結果
    $traverse = function($arr, &$levels, $level = 0) use (&$traverse) {
        if (is_array($arr)) {
            $level++;
            $levels[] = $level;
            foreach ($arr as $value) {
                $traverse($value, $levels, $level);
            }
        }
    };
    
    $traverse($arr, $levels);
    return max($levels);
}

// 測試案例
$arr1 = [1, 2, 3];                    // 一維
$arr2 = [[1,2], [3,4]];               // 二維
$arr3 = [[[1]], [2, [3, [4]]]];       // 四維

echo arrayLevel($arr1); // 1
echo arrayLevel($arr2); // 2
echo arrayLevel($arr3); // 4
?>

運作原理

  1. 初始化 $levels = [0],確保空陣列回傳 0。
  2. 遇到陣列則 $level++ 並記錄當前深度。
  3. 遞迴處理每個元素,將所有分支深度收集至 $levels。
  4. 最終取 max($levels) 為整體維度。

注意事項

  • PHP 7.4+ 可使用箭頭函式簡化,但遞迴需配合 use (&$fn)。
  • 非陣列輸入(如標量、null)直接回傳 0。
  • 關聯陣列與索引陣列同樣適用,is_array() 皆回傳 true。

替代方案

// 利用 json_encode 深度限制(間接估算,不精確)
function arrayDepthJson($arr) {
    $json = json_encode($arr);
    $depth = 0; $max = 0;
    for ($i = 0; $i < strlen($json); $i++) {
        if ($json[$i] === '[') { $depth++; $max = max($max, $depth); }
        elseif ($json[$i] === ']') { $depth--; }
    }
    return $max;
}
JSON 方案僅供參考,無法區分物件與陣列,且字串中含括號會誤判。遞迴遍歷法最準確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved