根据值重新排序数组

时间:2011-10-01 07:23:26

标签: arrays

我需要对数组进行重新排序,以便在父项之前加载所有slug,但前提是父项具有与slug值完全匹配的值。

例如,拿这个数组:

Array ( 
    [0] => Array ( 
        [parent] => information_desk_3 
        [slug] => about_dream_portal_1 
    )
    [1] => Array ( 
        [parent] => forum
        [slug] => information_desk_3 
    )
    [2] => Array ( 
        [parent] => about_dream_portal_1 
        [slug] => testing_2
    )
    [3] => Array ( 
        [parent] => testing_2 
        [slug] => information_desk_4 
    )
)

我需要它以便按如下方式排序:

Array ( 
    [0] => Array ( 
        [parent] => forum
        [slug] => information_desk_3 
    )
    [1] => Array ( 
        [parent] => information_desk_3 
        [slug] => about_dream_portal_1 
    )
    [2] => Array ( 
        [parent] => about_dream_portal_1 
        [slug] => testing_2
    )
    [3] => Array ( 
        [parent] => testing_2 
        [slug] => information_desk_4 
    )
)

但问题是,它需要搜索所有slu and并对它们进行重新排序,以便slu the在阵列中排在第一位,然后才能与那些slug的值相匹配。请有人帮助我,我已经好几个小时了,但现在无济于事。

1 个答案:

答案 0 :(得分:1)

听起来你真正拥有的是图形,并且你想要节点的部分排序。这意味着您可以使用标准图算法解决问题。

如果您构建一个项目树,其中每个父项都知道其所有子项,那么您可以对树进行广度优先遍历以构建部分排序的输出。

在你的例子中,这是一个非常简单的图表:

forum -> information_desk_3 -> about_dream_portal_1 -> testing_2 -> information_desk_4

如果你从forum开始并沿着树向下走,那么在你去的时候将节点添加到输出列表中,那么你将得到正确的顺序。

如果你有多个不相交的树,那么它会变得有点棘手,但仍然不应该太难。您只需确定哪些节点是根节点,然后依次遍历每个树。