Дерево категории на php

M9
На сайте с 15.05.2014
Offline
79
1948

наткнулся на статью хорошо описано про создания дерево категории, но функция вернет ответь в готовый html но я хочу получать дерево в массиве структура такая:

//Выбираем данные из БД
$result=mysql_query("SELECT * FROM categories");
//Если в базе данных есть записи, формируем массив
if (mysql_num_rows($result) > 0){
$cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
while($cat = mysql_fetch_assoc($result)){
$cats_ID[$cat['id']][] = $cat;
$cats[$cat['parent_id']][$cat['id']] = $cat;
}
}

function build_tree($cats,$parent_id,$only_parent = false){
if(is_array($cats) and isset($cats[$parent_id])){
$tree = '<ul>';
if($only_parent==false){
foreach($cats[$parent_id] as $cat){
$tree .= '<li>'.$cat['name'].' #'.$cat['id'];
$tree .= build_tree($cats,$cat['id']);
$tree .= '</li>';
}
}elseif(is_numeric($only_parent)){
$cat = $cats[$parent_id][$only_parent];
$tree .= '<li>'.$cat['name'].' #'.$cat['id'];
$tree .= build_tree($cats,$cat['id']);
$tree .= '</li>';
}
$tree .= '</ul>';
}
else return null;
return $tree;
}
echo build_tree($cats,0);//результат в html

результат в виде html:

Вопрос: возможно ли получит дерево категории в виде массива не зависимо от вложенности при

build_tree($cats,0);

получал массив дерево категории а не html

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#1

function build_hierarchy($arr, $id_key = 'id', $pid_key = 'parent_id') {

$structure = array();

while($elem = array_shift($arr)) {

if(isset($structure[ $elem[$id_key] ])) {

$elem['children'] = $structure[ $elem[$id_key] ];

unset($structure[ $elem[$id_key] ]);

} else

$elem['children'] = array();

if(isset($references[ $elem[$pid_key] ])) {

$references[ $elem[$pid_key] ]['children'][ $elem[$id_key] ] = $elem;

$references[ $elem[$id_key] ] =& $references[ $elem[$pid_key] ]['children'][ $elem[$id_key] ];

} else {

$structure[ $elem[$pid_key] ][ $elem[$id_key] ] = $elem;

$references[ $elem[$id_key] ] =& $structure[ $elem[$pid_key] ][ $elem[$id_key] ];

}

}

return array($structure);

}

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
M9
На сайте с 15.05.2014
Offline
79
#2

Получаю ошибку почему то: Notice: Undefined offset: 0 in /dom/n/url/url/public_html/catalog/controller/common/home.php on line 40

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3
mega94:
Получаю ошибку почему то: Notice: Undefined offset: 0 in /dom/n/url/url/public_html/catalog/controller/common/home.php on line 40

Я вам дал рабочую функцию из рабочей программы. Поэтому какие-то проблемы у вас во входных данных.

M9
На сайте с 15.05.2014
Offline
79
#4

Да нет данные отлично работает под тот код который я выкладывал такие вот данные:

INSERT INTO `categories` (`id`, `parent_id`, `name`) VALUES
(1, 0, 'Раздел 1'),
(2, 0, 'Раздел 2'),
(3, 0, 'Раздел 3'),
(4, 1, 'Раздел 1.1'),
(5, 1, 'Раздел 1.2'),
(6, 4, 'Раздел 1.1.1'),
(7, 2, 'Раздел 2.1'),
(8, 2, 'Раздел 2.2'),
(9, 3, 'Раздел 3.1');
//Выбираем данные из БД
$result=mysql_query("SELECT * FROM categories");
//Если в базе данных есть записи, формируем массив
if (mysql_num_rows($result) > 0){
$cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
while($cat = mysql_fetch_assoc($result)){
$cats_ID[$cat['id']][] = $cat;
$cats[$cat['parent_id']][$cat['id']] = $cat;
}
}
totamon
На сайте с 12.05.2007
Offline
437
#5
mega94:
Да нет данные отлично работает под тот код который я выкладывал такие вот данные:

о чем вопрос то? вот же у вас в массиве $cats - "дерево в массиве"...

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
M9
На сайте с 15.05.2014
Offline
79
#6

На этот вопрос ответили ребята из stackoverflow

B
На сайте с 13.02.2008
Offline
262
#7

А сортировка элементов то как идет? По id? А если понадобится порядок элементов изменить, например элементы местами поменять?

M9
На сайте с 15.05.2014
Offline
79
#8

Дерево идет по id, и сортировку можно сделать тоже по id

B
На сайте с 13.02.2008
Offline
262
#9
mega94:
Дерево идет по id, и сортировку можно сделать тоже по id

И что делать, если потребуется например элементы местами поменять? Имхо, нужно отдельное поле вводить для упорядочивания.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий