【问题标题】:multi-dimensional array hierarchy from key name来自键名的多维数组层次结构
【发布时间】:2019-10-01 18:54:50
【问题描述】:

我想知道如何通过标识符 Key NAME 获取层次结构,只是 PHP 的值。我已经尝试了一些内爆功能,但没有成功。我感谢任何帮助。谢谢
这是一个例子:

$treeArray = (Array
(
    [0] => Array
        (
            [name] => S-ATLANTICO-1
            [id] => 1HIk_jh2GHo2VnBbUI8c3P9cADY4NnKQ5
            [parents] => 
            [children] => Array
                (
                    [0] => Array
                        (
                            [name] => TESTE
                            [id] => 1EYi_CF7gjANq_MPnUOkquJI609Jkhzf0
                            [parents] => 1HIk_jh2GHo2VnBbUI8c3P9cADY4NnKQ5
                        )

                    [1] => Array
                        (
                            [name] => SAPO
                            [id] => 1I8QxJiMa11U2s4ncPxyqfdCPk_6dQ9Tl
                            [parents] => 1HIk_jh2GHo2VnBbUI8c3P9cADY4NnKQ5
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [name] => SAPO-1
                                            [id] => 1KGzjcy79TCKp-c6T1Xxm5WqswXhqFlb7
                                            [parents] => 1I8QxJiMa11U2s4ncPxyqfdCPk_6dQ9Tl
                                        )

                                    [1] => Array
                                        (
                                            [name] => carlos.csv
                                            [id] => 1eHU_r5GJCXualVQMhurd6FwOoD_h3hHG
                                            [parents] => 1I8QxJiMa11U2s4ncPxyqfdCPk_6dQ9Tl
                                        )

                                    [2] => Array
                                        (
                                            [name] => logo-news_sa.png
                                            [id] => 16HnsOxzDEow710jNfda7Mtt-8qsLwSeG
                                            [parents] => 1I8QxJiMa11U2s4ncPxyqfdCPk_6dQ9Tl
                                        )

                                )

                        )

                    [2] => Array
                        (
                            [name] => DOCUMENTOS
                            [id] => 1viFriBa2GaSxiLG8nDYIDd-sFl545T31
                            [parents] => 1HIk_jh2GHo2VnBbUI8c3P9cADY4NnKQ5
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [name] => carlos-excel
                                            [id] => 16YyMy3F9QMzRT5XtCMVJygKDEVVSRpAVmAjh0XU3luY
                                            [parents] => 1viFriBa2GaSxiLG8nDYIDd-sFl545T31
                                        )

                                    [1] => Array
                                        (
                                            [name] => carlos-excel.xlsx
                                            [id] => 1GbJ9YmwuRiUmnT8jRJ9pLZI7acqO4eu-
                                            [parents] => 1viFriBa2GaSxiLG8nDYIDd-sFl545T31
                                        )

                                    [2] => Array
                                        (
                                            [name] => SAPO
                                            [id] => 1DRBPJHPxRSeaa7zC8yF-UgGbo9tpwOsOxAusfEuGtsY
                                            [parents] => 1viFriBa2GaSxiLG8nDYIDd-sFl545T31
                                        )

                                    [3] => Array
                                        (
                                            [name] => PRECIOS
                                            [id] => 1S0lNS7bKOK6wBxhCZcB7uaNBXA1GMqlxwtTdSBc4f9U
                                            [parents] => 1viFriBa2GaSxiLG8nDYIDd-sFl545T31
                                        )

                                )

                        )

                )

        )

)
);

这个结果可以:在数组中或在屏幕上逐行打印。

S-大西洋-1/ S-大西洋-1/测试 S-大西洋-1/SAPO S-大西洋-1/SAPO/SAPO-1 S-大西洋-1/SAPO/carlos.csv S-大西洋-1/SAPO/logo-news_sa.png S-ATLANTICO-1/文档 S-大西洋-1/DOCUMENTOS/carlos-excel S-大西洋-1/DOCUMENTOS/carlos-excel.xlsx S-大西洋-1/DOCUMENTOS/SAPO S-ATLANTICO-1/DOCUMENTOS/PRECIOS

【问题讨论】:

  • 你需要看Recursion
  • @AbraCadaver 太棒了!花了我一秒钟才明白
  • 谢谢。我已经尝试过了,但没有成功
  • 那么这就是你应该问的......

标签: php arrays multidimensional-array path


【解决方案1】:
$array = [
    ['App', 'Classes', 'Auth'],
    ['App', 'Classes', 'Auth'],
    ['App', 'Classes', 'Middleware'],
    ['App', 'Classes', 'Phone'],
    ['App', 'Classes', 'Auth'],
    ['App', 'Mail'],
    ['App', 'Mail', 'Sender'],
    ['App', 'Box'],
    ['Bla', 'bli'],
];

var_dump(arrayToNamespace($array));

function arrayToNamespace($array) {
    $newArr = array();

    foreach ($array as $nsArr) {
        $wns = &$newArr;
        foreach ($nsArr as $ns) {
            if (!isset($wns[$ns])) {
                $wns[$ns] = array();
            }
            $wns = &$wns[$ns];
        }
    }
    return $newArr;
}

【讨论】:

    【解决方案2】:

    这应该是这样的:

    function rec($arr, $prefix ="") {
        if ($prefix != "") $prefix .= "/";
        foreach($arr as $e) {
            echo $prefix . $e['name'];
            if (!empty($e['children']))
                rec($e['children'], $prefix . $e['name']);
        }
    }
    

    我不在电脑上,所以只有这个伪代码......

    【讨论】:

    • 略有修改,但我认为你的想法有效。 +1 3v4l.org/UHpF7
    • @CarlosCosta 更新我的帖子以检查是否添加前缀/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多