在PHP中计算复杂多维数组中的维度

时间:2014-05-26 23:14:44

标签: php multidimensional-array

我不确定这是否已得到解答,但我想知道是否有一种简单的方法可以计算数组的维数而无需递归调用函数。

这是我的数组可能看起来像的一个例子....

$a[0][1][2][3]=4;
$a[0][11][22]=33;
$a[0][111]=222;
$a[0][1][2][3][4][5][6][7]=888;
$a[0][1][2][3][4][5][6][7][8]=999;

但我真正的数组不一定是数字。

我想要输出的是以上示例中的以下值...

3,2,1,7和8

任何人都可以指向正确的方向而不需要递归函数调用或大量CPU使用吗?


更新:

我之所以提出这个问题是因为我确实有一个很大的问题需要解决。在使用print_r()函数后,我在互联网上借用了一个实际处理我的邻接列表的函数,如下所示:

Array
(
[Pint] => Array
    (
    [Beer] => Array
        (
        [Parent] => Pint
        )

    [Parent] => 
    )

[Into] => Array
    (
    [Running] => Array
        (
        [Group] => Array
            (
            [Girl] => Array
                (
                [Parent] => Group
                )

            [Guy] => Array
                (
                [Parent] => Group
                )

            [Parent] => Running
            )

        [Parent] => Into
        )

    [Parent] => 
    )

)

我想要做的是使用数组中的数据来形成一个句子而不使用固定数字或名称,因为数组名称和值(除了父键之外)发生了变化。

所以在这个数组中,我希望使用单词形成以下句子并遍历数组:

所需的句子1.一品脱啤酒(我将添加" A"""稍后。品脱和啤酒来自阵列。)

期望的句子2.小组中的女孩和男人遇到某事("","在"和"""是我要添加的词以后的句子)

如果有一个像foreach这样的函数从最后一个维度开始并且在第一个维度中起作用,那么这可能会有所帮助。关于这些句子的常见之处在于,最后一个维度首先处理,第一个维度最后处理。

有人有想法回答吗?

P.S。我更新了其他代码以使数组如下:

Array
(
[Girl] => Array
    (
    [Group] => Array
        (
        [Running] => Array
            (
            [Into] => 
            )

        )

    )

[Guy] => Array
    (
    [Group] => Array
        (
        [Running] => Array
            (
            [Into] => 
            )

        )

    )

[Beer] => Array
    (
    [Pint] => 
    )

)

2 个答案:

答案 0 :(得分:0)

嗯,无论如何,这是一个递归解决方案。它给出了最深维度的计数:

function count_array_dimensions($a, $count) {
    $max = $count;
    foreach($a as $e) {
        if(is_array($e)) {
            $current = count_array_dimensions($e, $count+1);
            if($current > $max) {
                $max = $current;
            }
        }
    }

    return $max;
}

//Usage:
$a[0][1][2][3][4][5][6][7][8]=999;

//Initialize with 0 instead of 1 for your counting scheme
echo count_array_dimensions($a, 1);

答案 1 :(得分:0)

您在所有这些阵列的维度上都是一个接一个的。你的输出应该是4,3,2,8和9.不幸的是,array_walk_recursive是你最好的选择。