Здравствуйте!
Хотелось бы поделиться очень хорошим примером рекурсии для php по самой распространённой задаче - сделать меню с категориями.
Прежде всего создадим таблицу в базе данных.
Надеюсь код был полезен.
Успехов и хорошего дня!
Хотелось бы поделиться очень хорошим примером рекурсии для php по самой распространённой задаче - сделать меню с категориями.
Прежде всего создадим таблицу в базе данных.
Заполним её данными.CREATE TABLE `categories` (`id` INT NOT NULL AUTO_INCREMENT ,`parent_id` INT NOT NULL ,`name` VARCHAR( 50 ) NOT NULL ,PRIMARY KEY ( `id` ));
INSERT INTO `categories` (`id`, `parent_id`, `name`) VALUESСоздаём наш php файл для вывода и вытаскиваем данные из базы данных.
(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=mysqli_query($connect, "SELECT * FROM categories");
//Если в базе данных есть записи, формируем массив
if (mysqli_num_rows($result) > 0){
$cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
while($cat = mysqli_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);На выходе получаем очень красивую структуру:
Я считаю что это очень хороший пример рекурсии в php. Кроме того он решает столь распространённую задачу вывода меню или списка категорий.<ul><li>Раздел 1<ul><li>Раздел 1.1<ul><li>Раздел 1.1.1</li></ul></li><li>Раздел 1.2</li></ul></li><li>Раздел 2<ul><li>Раздел 1.1</li><li>Раздел 1.2</li></ul></li><li>Раздел 3<ul><li>Раздел 3.1</li></ul></li></ul>
Надеюсь код был полезен.
Успехов и хорошего дня!
Комментариев нет:
Отправить комментарий
Поделитесь своим мнением.