Лучший способ преобразовать список тегов в структурированный массив из MySQL?

Моя база данных хранит такой список:

ID | name
--- -----
1  | search
2  | search.categories
3  | search.categories.accessories
4  | search.categories.accessories.glasses
5  | search.categories.accessories.hats
6  | filters
7  | filters.payments
8  | filters.payments.creditcard
9  | filters.payments.debitcard

Теперь я хочу ВЫБРАТЬ его в рекурсивном массиве вот так:

[
    name, childs[
        name, childs[ ... ],
        name, childs[ ... ],
        name, childs[
            name, childs[ ... ],
            name, childs[ ... ],
        ],
    ],
    name, childs[
        name, childs[ ... ],
        name, childs[ ... ],
        name, childs[
            name, childs[ ... ],
            name, childs[ ... ],
        ],
    ]
]

Как лучше всего этого добиться? Напрямую из MySQL или ручную обработку строк?

Вам нужно будет использовать php для анализа строк и добавления их в массив. В этом тоже нет встроенной функциональности, придется что-то делать. Есть вопросы о том, как присвоить значение массиву с помощью «точечной записи», например Вот этот, что должно помочь вам начать работу. Кроме того, хранение нескольких значений в одном строковом поле, как это (grandparent.parent.child.etc), обычно считается плохой практикой.

Jonathan 09.08.2018 23:14

Я написал пример функции PHP, чтобы сделать что-то подобное, но с данными списка смежности вместо данных перечисления путей, как у вас. В любом случае, это может послужить примером для начала. stackoverflow.com/questions/3261228/…

Bill Karwin 10.08.2018 00:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы работаете с Laravel, вы можете создать вложенный массив, используя array_set и используя в качестве ключа столбец название вашей таблицы, пользуясь тем преимуществом, что вы уже храните в точечной нотации.

Несмотря на то, что вы не раскрываете, какова цель этого и почему вы хотите построить эту структуру таким образом, следует один из возможных подходов.

  • Инициализировать пустой массив ($structure = [])
  • Получить все записи таблицы и выполнить их итерацию (использовать выбор БД или получение модели по своему усмотрению)
  • Для каждой строки таблицы выполните array_set($structure, $listname, $value)

В вашем примере я не вижу, откуда может взяться $value, но я думаю, вы уловите идею.

$structure = [];
foreach($rows as $row)
{
    array_set($structure, $row->name, $value);
}

Другие вопросы по теме