У меня есть плоский список предметов. Некоторые элементы в списке являются родителями других элементов в списке. Мне нужно просмотреть каждый элемент и убедиться, что он не является недействительным. У каждого элемента есть время истечения срока действия, и элемент считается недействительным, если истек срок его действия или срок действия любого из его родительских элементов. Как я могу эффективно удалить все недопустимые элементы из списка?
По сути, мне дается иерархический набор данных в массиве. Каждый элемент имеет свой собственный идентификатор, идентификатор родителя, информацию о времени и другие бесполезные данные.
Это немного усложняется тем фактом, что корневых узлов также может быть несколько. Если у элемента нет 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
)
)
Я хотел бы найти эффективный способ удалить все элементы, которые недействительны в соответствии с первым абзацем, и вернуть массив оставшихся элементов.
Спасибо