#php #arrays
#php #массивы
Вопрос:
Я изо всех сил пытаюсь удалить элемент из рекурсивного массива, если родительский идентификатор не совпадает. Все, что я хочу отобразить отдельным деревом для каждого номера дерева. Я не нашел никакого решения с SQL, поэтому теперь я извлекаю верхние узлы этого дерева и удаляю массив, у которого нет идентификаторов верхнего узла. У меня уже есть древовидная структура, ниже я предоставляю структуру массива.
{
"196": {
"id": "196",
"username": "test1",
"parent_id": null,
"children": [
{
"id": "197",
"parent_id": "196",
"flower_id": null,
"username": "test1",
"children": []
},
{
"id": "198",
"parent_id": "196",
"flower_id": "1690587",
"username": "test3",
"children": [
{
"id": "213",
"parent_id": "198",
"flower_id": "5197062",
"username": "test33",
"children": []
}
]
},
{
"id": "199",
"parent_id": "196",
"flower_id": "1690587",
"username": "test2",
"children": [
{
"id": "205",
"parent_id": "199",
"flower_id": null,
"username": null,
"children": [
{
"id": "207",
"parent_id": "205",
"flower_id": null,
"username": null,
"children": []
}
]
},
{
"id": "212",
"parent_id": "199",
"flower_id": "6794158",
"username": "gunu",
"children": []
}
]
}
]
}
}
Вот что я делаю
function recursive_unset(amp;$array, $parentIds = array()) {
foreach ($array as $key => amp;$value) {
if(!in_array($value['parent_id'], $parentIds)) {
unset($array[$key]);
}
if (is_array($value['children'])) {
$this->recursive_unset($value, $parentIds);
}
}
}
Вот как я вызываю эту функцию $data = $this->recursive_unset($array, [198,199]);
Любая помощь приветствуется.
Заранее спасибо.
Комментарии:
1. Не могли бы вы пояснить, что означает «если родительский идентификатор не совпадает»? Скажите, что следует удалить в вашем примере?
2. @KoalaYeung, большое спасибо за ваш ответ. Я хочу удалить все элементы, где parent_id не равен 198 или 199.