【问题标题】:Sort collection (or array of objects) based on id and parent_id attributes根据 id 和 parent_id 属性对集合(或对象数组)进行排序
【发布时间】:2019-08-27 11:53:20
【问题描述】:

我遇到了基于对象 id 和对象的 parent_id 属性对 Laravel 集合进行排序的问题。

目前,我有以下格式的对象集合:

Collection {#563 ▼
  #items: array:20 [▼
    0 => Object {#546 ▶}
    1 => Object {#544 ▶}
    2 => Object {#540 ▶}
    3 => Object {#542 ▶}
    4 => Object {#541 ▶}
    5 => Object {#536 ▶}
  ]
}

每个对象都有以下属性:

#attributes: array:8 [▼
        "id" => "70"
        "name" => "Object Name 70"
        "parent_id" => "75"
      ]

我需要对该集合进行排序,首先是父项,然后是子项。然后是父母和孩子。一个对象的 parent_id 为 NULL。更像是这样的:

Parent
Child
Child
Parent
Parent
Child
Child
Child
Parent

【问题讨论】:

  • 你有一个有向图,恐怕你必须实现一个拓扑排序算法:en.wikipedia.org/wiki/Topological_sorting
  • groupBy()parent_id不是更好吗?
  • 你试过什么? :)
  • 请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topichow to ask... the perfect question 在此处申请。 StackOverflow 不是设计、编码、研究或教程资源。但是,如果您遵循您在网上找到的任何资源,进行诚实的编码尝试并遇到问题,那么您将有一个很好的示例可以发布。
  • 两级排序有据可查。几个有用的树排序有据可查。您在提供可行的编码尝试时遇到了哪些困难?

标签: php sql laravel algorithm sorting


【解决方案1】:

按 parent_id(从最低到最高)对集合进行排序,如果父 id 相等,则按 id(从最低到最高)排序。

这种方法假设集合中的第一个元素应该是根父元素(parent_id 为 NULL 的那个),并且为了使对象成为对象的父对象,父对象必须首先存在,因此总是有比它的任何孩子都低的 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 2015-06-17
    • 2019-02-11
    • 2011-03-29
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多