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 に答える