1

我有一个简单的项目清单。列表中的某些项目是列表中其他项目的父项。我需要检查每个项目,并确保它不是无效的。每个项目都有一个过期时间,如果一个项目是自己的或它的任何父项的过期时间已过,则该项目无效。如何有效地从列表中删除所有无效项目?

本质上,我在数组中得到了一组分层数据。每个项目都有自己的 id、parentID、时间信息和其他无用数据。

由于也可以有多个根节点,因此这有点复杂。它是一个项目没有 parentID,它是一个根节点。

示例数组(省略日期时间和其他信息):

Array
(
    [0] => MyObject
        (
            [id:protected] => 1
            [parentID:protected] => 2
        )

    [1] => MyObject
        (
            [id:protected] => 4
        )

    [2] => MyObject
        (
            [id:protected] => 2
            [parentID:protected] => 4
        )

    [3] => MyObject
        (
            [id:protected] => 3
        )

    [4] => MyObject
        (
        [id:protected] => 5
        [parentID:protected] => 3
    )
)

我想找到一种有效的方法来删除根据第一段无效的所有项目,并返回剩余项目的数组。

谢谢

4

1 回答 1

0

我认为最有效的做法是遍历所有项目并删除自过期的节点。通过这样做,当您稍后构建树时(我假设最终您会这样做),任何没有被自我过期标准手动删除的项目都将成为孤立的,因为缺少祖先,并且涵盖了祖先过期标准。如果需要,您可以将树重新转换回平坦的,但我猜您最终想要这棵树。

于 2012-05-11T21:08:18.673 回答