Как правильно организовать поиск в ограниченном дереве?

Добрый день, есть такое дерево, оно ограничено и состоит из групп и подгрупп. И в группе и в подгруппе могут быть элементы cultures. Ломаю голову, как правильнее сделать поиск по имени групп и культур. То есть, если какой то вложенный элемент совпадает с искомым значением, то надо выводить всю ветку.
Сейчас просто через foreach перебираю, но пугает тройная вложенность цикла.
Array
(
    [52] => Array
        (
            [id] => 52
            [name] => My group
            [cultures] => Array
                (
                )

            [subGroups] => Array
                (
                    [58] => Array
                        (
                            [id] => 58
                            [name] => My Group 5
                            [cultures] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 158
                                            [code] => 01.11.49.140
                                            [name] => Вика и смеси виковые на зерно
                                            [svg] => 
                                        )

                                )

                        )

                )

        )

    [53] => Array
        (
            [id] => 53
            [name] => My group 2
            [cultures] => Array
                (
                    [0] => Array
                        (
                            [id] => 157
                            [code] => 01.11.42.110
                            [name] => Зерно проса
                            [svg] => 
                        )

                )

        )

    [56] => Array
        (
            [id] => 56
            [name] => My group 3
            [cultures] => Array
                (
                    [0] => Array
                        (
                            [id] => 155
                            [code] => 01.11.73.120
                            [name] => Семена нута
                            [svg] => 
                        )

                    [1] => Array
                        (
                            [id] => 156
                            [code] => 01.11.79.110
                            [name] => Чина сушеная
                            [svg] => 
                        )

                )

            [subGroups] => Array
                (
                    [57] => Array
                        (
                            [id] => 57
                            [name] => My group 4
                            [cultures] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 153
                                            [code] => 01.16.11.110
                                            [name] => Хлопок-сырец тонковолокнистых сортов хлопчатника
                                            [svg] => 
                                        )

                                    [1] => Array
                                        (
                                            [id] => 154
                                            [code] => 01.16.11.120
                                            [name] => Хлопок-сырец средневолокнистых сортов хлопчатника
                                            [svg] => 
                                        )

                                )

                        )

                )

        )

)
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Трансформируйте начальное дерево в структуру "указатель", где слева будут нужные вам элементы (отсортированные по алфавиту), по которым ищите, а справа - id-шники содержащих их записей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы