【问题标题】:Sort all child by parent id按父 ID 对所有孩子进行排序
【发布时间】:2021-05-22 16:51:01
【问题描述】:

我有这样的数组:

(
    [0] => Array
        (
            [id] => 1
            [name] => Bazowa
            [parent_id] => 0
        )

    [1] => Array
        (
            [id] => 2
            [name] => Główna
            [parent_id] => 1
        )

    [2] => Array
        (
            [id] => 12
            [name] => PlayStation
            [parent_id] => 2
        )

    [3] => Array
        (
            [id] => 13
            [name] => Xbox
            [parent_id] => 2
        )

    [4] => Array
        (
            [id] => 14
            [name] => Nintendo
            [parent_id] => 2
        )

    [5] => Array
        (
            [id] => 15
            [name] => PC
            [parent_id] => 2
        )
)

我想像下面屏幕截图中的树一样对这个数组进行排序: Screen of tree what I want

我尝试使用这个Sort array values based on parent/child relationship

        foreach($xml->children()->children() as $value) {
        if($value->active == 1) {
            $categories[] = [
                'id' => (int) $value->id,
                'name' => (string) $value->name->language,
                'parent_id' => (int) $value->id_parent
            ];
        }
    }
    $parent_ids = [];

    $parents = ['' => []];
    foreach($categories as $val) {
        $parents[$val['parent_id']][] = $val;
    }
    $sorted = $parents[''];
    dump($parents); exit;
    for($val = reset($sorted); $val; $val = next($sorted)) {
        if(isset($parents[$val[0]])) {
            foreach($parents[$val[0]] as $next) {
                $sorted[] = $next;
            }
        }
    }

对我来说最重要的是选择时一切都显示得很好,是这样的:

-Playstation
-- Playstation 5
--- 格里
--Playstation 3
--- 格里
谁能帮帮我?

编辑: Build a tree from a flat array in PHP解决的问题

【问题讨论】:

  • 你尝试了什么?最简单的解决方案是以多级数组的形式创建类别树。要按子数组的值排序,您应该使用usort(),但是使用“我想要”+屏幕截图并不能很好地描述您的问题。即使使用屏幕截图,也可以将其包含在此处并内联显示,而不是链接到第三方服务。
  • @biesior 好的,对不起,我更正了帖子,希望你现在能更好地理解它
  • 你这里有父子元素之间的关系,所以你需要创建一个代表树的嵌套数组,你可以使用 PHP 或 JS 来完成,取决于你的需要。如果我理解正确,当它在代码的另一部分(用于选择)中工作时,您可以检查它是如何在那里完成并复制解决方案。
  • 我不太明白我怎么能做到这一点
  • 使用递归从数据库中获取数据更容易创建树,您可以这样访问它还是只有这个数组?

标签: php arrays sorting relationship


【解决方案1】:

这应该可行

usort($arr, function($a, $b) {
 return $a["parent_id"] > $b["parent_id"];
});

【讨论】:

  • 它没有按照它想要的方式工作。这样我只按父 ID 排序,我希望它进入我在示例中指示的适当树中。
猜你喜欢
  • 1970-01-01
  • 2018-03-22
  • 2013-10-12
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
相关资源
最近更新 更多