【发布时间】:2016-12-31 11:53:46
【问题描述】:
我正在尝试对数组进行排序,以确保任何项的父项始终存在于数组中。例如:
Array
(
[0] => Array
(
[0] => 207306
[1] => Bob
[2] =>
)
[1] => Array
(
[0] => 199730
[1] => Sam
[2] => 199714
)
[2] => Array
(
[0] => 199728
[1] => Simon
[2] => 207306
)
[3] => Array
(
[0] => 199714
[1] => John
[2] => 207306
)
[4] => Array
(
[0] => 199716
[1] => Tom
[2] => 199718
)
[5] => Array
(
[0] => 199718
[1] => Phillip
[2] => 207306
)
[6] => Array
(
[0] => 199720
[1] => James
[2] => 207306
)
)
在上面的数组中这个“失败”,因为 [1][2] (Sam) 还不存在,[4][2] (Tom) 也不存在。
在这种情况下,正确的输出应该是,因为 Sam 和 Tom 的父母在他们出现在数组中之前就已经存在:
Array
(
[0] => Array
(
[0] => 207306
[1] => Bob
[2] =>
)
[1] => Array
(
[0] => 199714
[1] => John
[2] => 207306
)
[2] => Array
(
[0] => 199730
[1] => Sam
[2] => 199714
)
[3] => Array
(
[0] => 199728
[1] => Simon
[2] => 207306
)
[4] => Array
(
[0] => 199718
[1] => Phillip
[2] => 207306
)
[5] => Array
(
[0] => 199716
[1] => Tom
[2] => 199718
)
[6] => Array
(
[0] => 199720
[1] => James
[2] => 207306
)
)
我找到了一个答案https://stackoverflow.com/a/12961400/1278201,它非常接近,但它似乎只深了一层(即只有一个父级),而在我的例子中,层次结构中可能有 1 或 10 层。
如何对数组进行排序,以便除非其父元素之前已经存在,否则不会出现任何值?
【问题讨论】:
-
请更清楚地解释您的问题。目前尚不清楚每个数组中索引 0 和 2 处的整数值指的是什么,因为它们太大而无法引用任何现有索引。
-
索引 0 是每个员工的 ID,索引 2 是该员工的经理 ID,这是经理 ID 的查找,因此,在上面的示例中,John 的 ID 为 199714,并且他的经理是 207306,即 Bob,因为 Bob 的 ID 为 207306 (index0)
-
我正在考虑投票结束这个问题,因为这更像是一个编码挑战而不是一个真正的问题。您没有发布任何解决问题的个人尝试,只是简单地发布了一些数据和一些已经给出的真正有效的解决方案的链接。通过坚持 SO 的严格标准,这不是一个好问题。考虑为您的下一个问题重新阅读stackoverflow.com/help/how-to-ask。
-
这种特殊的关系存储方式称为adjacency list,还有well-defined ways of traversing them。