【问题标题】:Sorting non-nested array of data from adjacency model从邻接模型中对非嵌套数据数组进行排序
【发布时间】:2013-03-08 00:22:33
【问题描述】:

我有一个从使用邻接模型构建主题层次结构的数据库表中获取的数据数组。每条记录包含以下字段:

  • 'id' - 一个唯一的 AI id。
  • 'name' - 显示名称。
  • 'parent_id' - 父主题的 id(对于根主题可以为 null)

该数组来自数据库,未嵌套并按 id 排序,如您所料。 'id' 字段是随机且随意的,不能依赖它来生成有用的订单。我正在寻找一种使用 parent_id 对数组进行排序的方法,以便它具有正确的邻接顺序,但最终结果不会嵌套到子数组中。该列表如下所示:

  • RootTopicA
  • 主题1
  • 主题2
  • Child1ofATopic2
  • Child2ofATopic2
  • 主题3
  • RootTopicB
  • BTopic1
  • BTopic2

任何帮助或指向示例的指针(即使是不同的语言)将不胜感激。

【问题讨论】:

  • 你的数组结构是什么?我了解,上面的列表是您想要的输出,但输入是什么?
  • 它是一个来自数据库的记录数组 array(array(id=>1,name=>RootTopicA,parent_id=>null),array(id=>2,name=>ATopic1, parent_id= >1)) 等

标签: php arrays sorting adjacency-list adjacency-list-model


【解决方案1】:

您可以添加一个字段,例如 sort,您可以在其中存储类别中相同 ID 的顺序。

另一种解决方案是通过ORDER BY parent_id, id 对它们进行排序(在SQL 中)或将两者结合起来,ORDER BY sort,使用类似(未测试)的 JOIN:

SELECT object.id, object.sort, parent.id, parent.sort
FROM objects AS object
LEFT JOIN objects AS parent ON object.parent=parent.id
ORDER BY parent.sort, object.sort;

假设objects是你的表名,同一个表是以object作为主对象,parent作为它的父对象(你需要它来获取父对象的sort)。

【讨论】:

  • 不幸的是,我认为这不是我想要的。 parent_id 列中应该有足够的信息来将数据排列到父、子和子子中,而无需额外的排序列。最终的顺序并不重要(可以按字母顺序或按 id),只要每个父母在其下都有其孩子。理想情况下,我想使用数组而不是查询,因此我可以将其包装到类/函数中以在其他地方使用。
  • 如果我按 parent_id 排序,我会得到一个像这样的列表 RootTopicA,RootTopicB,Atopic1,Atopic2,Atopic3,Btopic1,Btopic2,child1ofatopic2,child2ofatopic2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多