наткнулся на статью хорошо описано про создания дерево категории, но функция вернет ответь в готовый 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:
Вопрос: возможно ли получит дерево категории в виде массива не зависимо от вложенности
Вопрос: возможно ли получит дерево категории в виде массива не зависимо от вложенности ?
Отвечаю на этот вопрос во втором примере ! Хотя и первый тоже может понадобится.В моём коде он выводит категории в dropdown lists(<sleect><option>...)
.
=========================================================================
Примечание : mysql_fetch_assoc($result)
вернёт вам вот такой
массив:
$arr = [
[
'id' => 1,
'parent_id' => 0,
'name' => 'Раздел 1'
],
[
'id' => 2,
'parent_id' => 0,
'name' => 'Раздел 2'
],
[
'id' => 3,
'parent_id' => 0,
'name' => 'Раздел 3'
],
[
'id' => 4,
'parent_id' => 1,
'name' => 'Раздел 1.1'
],
[
'id' => 5,
'parent_id' => 1,
'name' => 'Раздел 1.2'
],
[
'id' => 6,
'parent_id' => 4,
'name' => 'Раздел 1.1.1'
],
[
'id' => 7,
'parent_id' => 2,
'name' => 'Раздел 2.1'
],
[
'id' => 8,
'parent_id' => 2,
'name' => 'Раздел 2.2'
],
[
'id' => 9,
'parent_id' => 3,
'name' => 'Раздел 3.1'
]
];
Дальнейшие примеры будут приведены исходя из данного массива $arr
,который может иметь безграничную вложенность иерархий (id -> parent_id ).По крайней мере столько сколько позволено стеков в рекурсии.По моему равен 1000.
1.Результат: Одномерный массив указывающий глубину вложенности через черточку
-
:
function CreateTree($array,$sub=0,$tab='')
{
//asort($array);
$category=array();
if($sub>0){$tab.='-';}
foreach($array as $v){
if($sub == $v['parent_id']){
$category[$v['id']] = $tab.$v['name'];
$category += CreateTree($array,$v['id'],$tab);
}
}
return $category;
}
echo '<pre>';
print_r(CreateTree($arr));
2. Результат: Многомерный массив с иерархической вложенностью:
function CreateTree($array,$sub=0)
{
$a = array();
foreach($array as $v)
{
if($sub == $v['parent_id'])
{
$b = CreateTree($array,$v['id']);
if(!empty($b))
$a[$v['name']] = $b;
else
$a[$v['id']] = $v['name'];
}
}
return $a;
}
echo "<pre>";
print_r(CreateTree($arr));
Вывод многоуровневого меню с неограниченным уровнем вложенности
https://webformyself.com/vyvod-mnogourovnevogo-menyu-s-neogranichennym-urovnem-vlozhennosti/
https://www.youtube.com/watch?v=EuBaxgzJzd8
Древовидная структура для вывода многоуровневого меню на php
https://webformyself.com/drevovidnaya-struktura-dlya-vyvoda-mnogourovnevogo-menyu-na-php/
https://www.youtube.com/watch?v=G0rHzDnwCdQ
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сложилась такая ситуация, есть несколько отдельных приложений, которые используют одну базу данныхКонкретнее, есть приложение на vaadin'e и есть...
Как включить кэширование статических ресурсовЗнаю что можно добавить дерективу в application
В C# есть функция Assemblyload - запускающая сборку из массива байт
Я уже делал все возможные махинации с расположением jdk и в cmd у меня javac работает как должноВыдает вот это: