首页 > 解决方案 > 根据 id 和 parent_id 属性对集合(或对象数组)进行排序

问题描述

我遇到了基于对象 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

标签: phpsqllaravelalgorithmsorting

解决方案


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

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


推荐阅读