Всем привет! Делаю небольшую админку. Есть каталог типа:
Телефон->Модель1 Модель2
Планшет
Ноутбук->Модель1 Модель2 Модель3
Некоторые каталоги имеют подкаталог, который я указал стрелками(->)
Эти каталоги я поместил в БД и главные каталоги указал в столбике parent 1, а где подкаталог, то 0 и в столбике id_parent указал id главного каталога.
Остановился при выводе подкаталогов. Делаю запрос и вывожу все с помощью while
Главные вывожу без проблем, а вот подкаталоги что-то не могу.
Как это сделать?
Придется каждый раз делать запрос, если у главного каталога есть подкаталоги или можно как-то по проще?
PS: Не знаю понятно ли объяснил, если что, спросите что не понятно, постараюсь объяснить
Вы имеете ввиду, что если бы был один уровень вложенности - то можно было бы проверять только наличие одного родителя у подкаталога или наоборот. А у вас получается непредсказуемая вложенность? Думаю тут рекурсивно обходить.
rinaz22, это когда функция которая выводит каталог, встречает каталог, и вызывает саму себя но уже в аргументе стоит каталог, который был встречен в первом вызове
function printDir($item)
{
if ($item['parent'] > 0) {
printDir($item['parent']);
} else {
echo $item['name'];
}
}
rinaz22, или же можете хранить id подкатегорий или родителей в виде строки, например, '1,2,34,65' - и дергать поиском по этой строке. Так себе метод, но, в зависимости от задачи мб пригодится.
Дмитрий, у меня все хранится в одном БД и отличие лишь в parent и id_parent. К сожалению не понимаю как с помощью такого метода можно решить мою проблему
rinaz22, корневой каталог имеет ид родителя 0, все вложенные имеют ид родителя равным ид категории
Функция примерная, смысл уловить.
Например надо напечатать список категорий, если это корень, то есть 0 в родителе, печатаем имя, либо вызываем ещё раз вложено функцию и в аргументе указываем ид , в теле можем хоть запрос делать
Ещё пример рекурсии
$a = 1;
$b = [1,2,3];
//число и массив
function test($var)
{
if (is_array($var)) {
array_map('test', $var);
} else {
echo $var++ . ' - ';
}
}
//Если вызвать функцию с числом, будет вывод, если с массивом чисел, будет рекурсия
test($a);
test($b);