首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:数组中的计数数组

PHP:数组中的计数数组
EN

Stack Overflow用户
提问于 2019-11-25 21:51:28
回答 1查看 186关注 0票数 0

我有一个多维数组,如下所示:

代码语言:javascript
复制
array ( 
    0 => array ( 'text' => 'LEVEL 0-0', 'children' => 
    array ( 
        0 => array ( 'text' => 'LEVEL 1-0 0', 'children' =>
        array ( 
            0 => array ( 'text' => 'LEVEL 2-0 0', 'children' => 
            array ( 
                0 => array ( 'text' => 'LEVEL 3-0 0', ), 
                1 => array ( 'text' => 'LEVEL 3-1 0', ), 
                2 => array ( 'text' => 'LEVEL 3-2 0', ), 
                3 => array ( 'text' => 'LEVEL 3-3 0', ), 
                4 => array ( 'text' => 'LEVEL 3-4 0', ), 
                5 => array ( 'text' => 'LEVEL 3-5 0', ), ), ), 
            1 => array ( 'text' => 'LEVEL 2-1 0', ), 
            2 => array ( 'text' => 'LEVEL 2-2 0', 'children' => 
                array ( 
                0 => array ( 'text' => 'LEVEL 3-0 2', ), ), ), 
            3 => array ( 'text' => 'LEVEL 2-3 0', ), 
            4 => array ( 'text' => 'LEVEL 2-4 0', ), 
            5 => array ( 'text' => 'LEVEL 2-5 0', 'children' => 
            array ( 
                0 => array ( 'text' => 'LEVEL 3-0 5', ), 
                1 => array ( 'text' => 'LEVEL 3-1 5', ), 
                2 => array ( 'text' => 'LEVEL 3-2 5', ), 
                3 => array ( 'text' => 'LEVEL 3-3 5', ), 
                4 => array ( 'text' => 'LEVEL 3-4 5', ), 
                5 => array ( 'text' => 'LEVEL 3-5 5', ), ), ), 
            6 => array ( 'text' => 'LEVEL 2-6 0', ), 
            7 => array ( 'text' => 'LEVEL 2-7 0', ), ), ), 
        ), 
    ), 
)

如何计数和检查数组是否是数组中的最终数组?

假设我们有一个计数器$i = 0;

每当数组有子数组时,我们都希望计数器增量。

if (!empty($value['children'])) { $i++; }

每当我们到达数组中的最终数组时,我们都希望计数器减少。

伪码if (final array in array) { $i--; }

我们的尾数应该是$i = 0;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-25 23:56:09

在迭代数组之前,可以使用array_key_last()查找数组中最后一个元素的键。这可以应用于任意数量的数组维度。

此示例将输出示例树中每个节点的文本,并指示该节点是否为最终数组元素。

代码语言:javascript
复制
function listElements(array $input)
{
    $final = array_key_last($input);
    $n = count($input);
    foreach ($input as $key => $element) {
        echo $element['text'], ($key == $final) ? " last of $n" : '', PHP_EOL;
        if (isset($element['children'])) {
            listElements($element['children']);
        }
    }
}

(这使用的方法与最近更新的this answer对建议的重复使用的方法相同。我只是在这里演示,当递归应用时,它仍然可以工作。)

根据您的编辑,您所指的$i似乎对应于递归深度。您可以通过将深度添加到函数签名中并在递归调用中递增来跟踪这一点。下面是一个用end()/key()而不是array_key_last()使用PHP5.6语法的示例。

代码语言:javascript
复制
function listElements(array $input, $depth = 0)
{
    end($input);
    $final = key($input);
    $n = count($input);
    foreach ($input as $key => $element) {
        echo $element['text'];
        echo ($key == $final) ? " last of $n," : '';
        echo " depth $depth", PHP_EOL;
        if (isset($element['children'])) {
            listElements($element['children'], $depth + 1);
        }
    }
}

https://3v4l.org/J9fek的工作示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59040631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档