Вывод древовидной структуры [закрыт]

213
29 августа 2018, 19:10

как мне вывести свою структуру в таком же виде как на картинке, если моя структура под цифрой 1 и моя структура вниз идет на 6 уровней

Answer 1

Это достаточно просто делается.
С точки зрения хранения элементов дерева в базе достаточно добавить поле parent_id (или похожее по смыслу) в таблицу элементов дерева

--
-- Структура таблицы `tree_elements`
--
CREATE TABLE `tree_elements` (
  `id` int(10) UNSIGNED NOT NULL,
  `parent_id` int(10) UNSIGNED DEFAULT NULL,
  `title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `options` json DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Индексы таблицы `tree_elements`
--
ALTER TABLE `tree_elements`
  ADD PRIMARY KEY (`id`),
  ADD KEY `tree_elements_parent_id_foreign` (`parent_id`);
--
-- AUTO_INCREMENT для таблицы `tree_elements`
--
ALTER TABLE `tree_elements`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- Ограничения внешнего ключа таблицы `tree_elements`
--
ALTER TABLE `tree_elements`
  ADD CONSTRAINT `tree_elements_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `tree_elements` (`id`) ON DELETE CASCADE;
COMMIT;

Это только структура таблицы, но чтобы вывести структуру, нужно получить эелемент по id, а потом рекурсивно получать элементы, по нужному parent_id.
Например, получаем эелемент по его id: SELECT * FROM tree_elements WHERE id = ?. Потом получаем массив элементов 1-го уровня вложености, у которых parent_id равен id искомого элемента (SELECT * FROM tree_elements WHERE parent_id = ?). Получив список элементов второго уровня, делаем запрос к таблице уже с массивом id элементов второго уровня.
Например, циклом прошлись по полученным результатам элементов второго уровня, вытащили id-шники в массив $ids. Потом делаем запрос элементов третьего уровня, в который передаем массив айдишников - SELECT * FROM tree_elements WHERE id IN (?,?,?).
При обработке результатов обычно создается ассоциативный массив с полем children

$element = [
  'title' => 'root',
  'children' => [
    [
      'title' => 'child1',
      'children' => [
        [
          'title' => 'child2',
          'children' => []
        ],
      ]
    ],
  ]
]
READ ALSO
Авторизация с csrf через cURL

Авторизация с csrf через cURL

При первом сеансе с сайтом генерируется уникальный CSRF код, который нужно передать для авторизацииПочему-то не получается

253
авторизация curl

авторизация curl

Нашёл тему Авторизация с помощью CURL но непонятноу меня есть адрес где нужно авторизоваться, авторизацию хочу сквозную т

182
переадресация .htaccess

переадресация .htaccess

как с помощьюhtaccess переадресовывать пользователя с:

190