确定PHP数组中的维数

时间:2010-01-23 05:11:49

标签: php

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

7 个答案:

答案 0 :(得分:16)

不错的问题,这是a solution I stole from the PHP Manual

function countdim($array)
{
    if (is_array(reset($array)))
    {
        $return = countdim(reset($array)) + 1;
    }

    else
    {
        $return = 1;
    }

    return $return;
}

答案 1 :(得分:4)

你可以试试这个:

$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);

答案 2 :(得分:1)

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

其他人建议的递归函数是混乱的,但最接近答案。

下进行。

答案 3 :(得分:1)

这个适用于每个维度不具有相同类型元素的数组。它可能需要遍历所有元素。

$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;
}

答案 4 :(得分:1)

这是一个对我有用的解决方案,用于获取未均匀分布的数组的维数。

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;}

答案 5 :(得分:0)

已更正为Some issues with jumping from one function to another in a loop in php

这个双重函数将转到$ a中每个数组的最后一个维度,当它不再是一个数组时,它将回显它用分隔符|到达那里的循环次数。 这段代码的缺点是它只有回声并且无法返回(以正常方式)。

function cc($b, $n)
{
    $n++.' ';
    countdim($b, $n);

}
function countdim($a, $n = 0)
{
    if(is_array($a))
    {
        foreach($a as $b)
        {
            cc($b, $n);
        }
    }else
    {
        echo $n.'|';
    }
}
countdim($a);

这里我用return做了一个函数,但是..它从html返回然后“GET”回到php按钮点击..我不知道任何其他方式让它工作.. 所以只需将数组命名为$ 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.";

答案 6 :(得分: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;
}