确定PHP数组中的维数

确定PHP数组中的维数,php,Php,有没有办法确定一个PHP数组中有多少个维度?好问题,这里是: 您可以尝试以下方法: $a["one"]["two"]["three"]="1"; function count_dimension($Array, $count = 0) { if(is_array($Array)) { return count_dimension(current($Array), ++$count); } else { return $count; } } print

有没有办法确定一个PHP数组中有多少个维度?

好问题,这里是:

您可以尝试以下方法:

$a["one"]["two"]["three"]="1";

function count_dimension($Array, $count = 0) {
   if(is_array($Array)) {
      return count_dimension(current($Array), ++$count);
   } else {
      return $count;
   }
}

print count_dimension($a);

与大多数过程语言和面向对象语言一样,PHP并不是本机实现多维数组——它使用嵌套数组

其他人提出的递归函数很混乱,但最接近答案


C.

此方法适用于每个维度没有相同类型元素的数组。它可能需要遍历所有元素

$a[0] = 1; $a[1][0] = 1; $a[2][1][0] = 1; function array_max_depth($array, $depth = 0) { $max_sub_depth = 0; foreach (array_filter($array, 'is_array') as $subarray) { $max_sub_depth = max( $max_sub_depth, array_max_depth($subarray, $depth + 1) ); } return $max_sub_depth + $depth; } $a[0]=1; $a[1][0]=1; $a[2][1][0]=1; 函数数组\最大\深度($array,$depth=0){ $max_sub_depth=0; foreach(数组\过滤器($array,'is \ array')作为$subarray){ $max\u sub\u depth=max( $max_sub_深度, 阵列最大深度($subarray,$depth+1) ); } 返回$max_sub_depth+$depth; } 修正于


此双精度函数将转到$a中每个数组的最后一个维度,当它不再是数组时,它将使用分隔符|返回它到达该维度所做的循环数。 这段代码的缺点是它只会回显,无法返回(以正常方式)

在这里,我创建了一个带有return的函数,但是。。这是从html返回,然后点击按钮“返回”到php。。4.我不知道还有什么别的办法可以使它奏效。。 因此,只需将数组命名为$a并点击按钮:/

$max_depth_var = isset($_REQUEST['max_depth_var']) ? $_REQUEST['max_depth_var'] : 0;
?>
<form id="form01" method="GET">
<input type="hidden" name="max_depth_var" value="<?php
function cc($b, $n)
{
    $n++.' ';
    bb($b, $n);
}
function bb($a, $n = 0)
{
    if(is_array($a))
    { 
        foreach($a as $b)cc($b, $n); 
    }else
    {
    echo $n.', ';
    };
}
bb($a); ?>">
<input type="submit" form="form01" value="Get max depth value">
</form><?php
$max_depth_var = max(explode(', ', rtrim($max_depth_var, ",")));
echo "Array's maximum dimention is $max_depth_var.";
$max\u depth\u var=isset($u请求['max\u depth\u var'))$_请求['max_depth_var']:0;
?>

如果只有最里面的数组有项,则可以使用以下函数:

function array_dim($array = []) {
    $dim = 0;
    $json = json_encode($array);
    $json_last_index = strlen($json) - 1;

    while (in_array($json[$json_last_index - $dim], ['}', ']'])) {
        $dim++;
    }

    return $dim;
}
function max_array_dim($array = []) {
    $json = json_encode($array);

    $step = 0;
    $max = 0;
    for ($i = 0; $i < strlen($json); $i++) {
        if (in_array($json[$i], ['[', '{'])) {
            $step++;
        }
        if (in_array($json[$i], [']', '}'])) {
            $step--;
        }
        $max = max($max, $step);
    }

    return $max;
}

如果要计算最大阵列维数,可以使用以下函数:

function array_dim($array = []) {
    $dim = 0;
    $json = json_encode($array);
    $json_last_index = strlen($json) - 1;

    while (in_array($json[$json_last_index - $dim], ['}', ']'])) {
        $dim++;
    }

    return $dim;
}
function max_array_dim($array = []) {
    $json = json_encode($array);

    $step = 0;
    $max = 0;
    for ($i = 0; $i < strlen($json); $i++) {
        if (in_array($json[$i], ['[', '{'])) {
            $step++;
        }
        if (in_array($json[$i], [']', '}'])) {
            $step--;
        }
        $max = max($max, $step);
    }

    return $max;
}
function max\u array\u dim($array=[]){
$json=json_encode($array);
$step=0;
$max=0;
对于($i=0;$i
这里有一个解决方案,它可以帮助我获得分布不均匀的数组的维数

function count_dimension($array, $count = 0) {
$maxcount = 0;
foreach ($array as $key) {
    if(is_array($key)) {
        $count = count_dimension(current($key), ++$count);
        if($count > $maxcount) {
            $maxcount = $count;
        }
    } else {
        if($count > $maxcount) {
            $maxcount = $count;
        }
    }
}

return $maxcount;}

这并不完全正确。因为它只测试数组的第一个元素。因此,只有当您确定它是一个均匀分布的数组时,才会给出预期的结果。您必须循环所有元素才能真正了解可变深度。(或者是一些我不知道的快速遍历算法)的可能重复