PHP удаляет элементы из рекурсивного массива, если идентификатор не совпадает

#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.