有没有办法找出PHP数组的“深度”?

2022-08-30 09:26:32

PHP 数组可以包含其元素的数组。这些数组可以有数组等等。有没有办法找出PHP数组中存在的最大嵌套?例如,如果初始数组没有数组作为元素,则返回 1;如果至少有一个元素是数组,则返回 2,依此类推。


答案 1

这是另一种选择,可以避免肯特·弗雷德里克(Kent Fredric)指出的问题。它为print_r()提供了检查无限递归的任务(它做得很好),并使用输出中的缩进来查找数组的深度。

function array_depth($array) {
    $max_indentation = 1;

    $array_str = print_r($array, true);
    $lines = explode("\n", $array_str);

    foreach ($lines as $line) {
        $indentation = (strlen($line) - strlen(ltrim($line))) / 4;

        if ($indentation > $max_indentation) {
            $max_indentation = $indentation;
        }
    }

    return ceil(($max_indentation - 1) / 2) + 1;
}

答案 2

这应该这样做:

<?php

function array_depth(array $array) {
    $max_depth = 1;

    foreach ($array as $value) {
        if (is_array($value)) {
            $depth = array_depth($value) + 1;

            if ($depth > $max_depth) {
                $max_depth = $depth;
            }
        }
    }

    return $max_depth;
}

?>

编辑:测试得非常快,它似乎有效。