【问题标题】:Organize array based on hierarchy of parent field根据父字段的层次组织数组
【发布时间】:2021-01-24 13:12:19
【问题描述】:

我在使用 PHP 构建的应用程序上有一个“类别”表。每个类别都可以有一个子类别,依此类推。例如:

-Computer
--Laptops
---Apple
---Dell
--Monitor
---LCD
---Ultrawide

我需要像上面的例子那样分层组织一个数组。考虑到在我的表上我只保存 3 个字段:

id
name_cateogry
parent_id

所以我只保存第一个直接的 parent_id。如果是第一级,则 parent_id 为空。对于所有其他级别,parent_id 接收父级别的 id。
考虑到许多级别,我很难创建一个分层组织数组的脚本。
我想要一个关于如何用 PHP 完成的建议,这样我就可以在应用程序上分层显示类别。

【问题讨论】:

  • 那些不属于任何其他类别的类别呢?电脑?
  • 在这种情况下,数据库上的列是空的。
  • 获取所有,迭代结果并从中构建一个新数组,直到获得所需的结构。

标签: php


【解决方案1】:

此功能将帮助您,您可以根据数据制作树。
所以首先你需要获取所有数据,然后使用这个makeTree function 为它制作一棵树

<?php

$array = [
    [    
        "id" => 1,
        "name" => "hi",
        "parent_id" => null,
    ],
    [    
        "id" => 2,
        "name" => "hi2",
        "parent_id" => 1,
    ],
    [    
        "id" => 3,
        "name" => "hi3",
        "parent_id" => 2,
    ],
    [    
        "id" => 4,
        "name" => "h4",
        "parent_id" => 1,
    ],
    [    
        "id" => 5,
        "name" => "hi5",
        "parent_id" => null,
    ],
];

function makeTree(array $elements, $parentId = 0) {
    $branch = array();
    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = makeTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }
    return $branch;
}

$tree = makeTree($array);
print_r( $tree );

输出

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => hi
            [parent_id] => 
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => hi2
                            [parent_id] => 1
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => hi3
                                            [parent_id] => 2
                                        )
                                )
                        )
                    [1] => Array
                        (
                            [id] => 4
                            [name] => h4
                            [parent_id] => 1
                        )
                )
        )
    [1] => Array
        (
            [id] => 5
            [name] => hi5
            [parent_id] => 
        )
)

【讨论】:

  • 非常感谢。这个脚本正是我需要的。它根据我的需要分层组织了数组。极好的。感谢您花时间帮助他人。
猜你喜欢
  • 2015-12-16
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多