无限分类设计
好久没写博客啦。趁着时间稍微空闲点,整理下笔记。今天复习的知识点是无限分类的设计。
第一步 :设计数据库。
CREATE TABLE `fenlei` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`pid` smallint(10) DEFAULT NULL,
`path` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
)
准备数据:
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (1, '国际新闻', 0, '0');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (2, '国内新闻', 0, '0');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (3, '国际娱乐新闻', 1, '0-3');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (4, '国际体育新闻', 1, '0-4');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (5, '国内娱乐新闻', 2, '0-5');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (6, '国内体育新闻', 2, '0-6');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (7, '国际足球新闻', 4, '0-4-7');
INSERT INTO `python3`.`fenlei`(`id`, `name`, `pid`, `path`) VALUES (8, '国内篮球新闻', 6, '0-6-8');

第二步:
输出树型图。递归。
<?php
/**
* Created by PhpStorm.
* User: Hurrian
* Date: 2020/7/27
* Time: 16:50
*/
$username = 'root';
$password = 'root';
$servername = '127.0.0.1';
try{
$connect = new PDO("mysql:host=$servername;dbname=python3", $username, $password);
echo '连接成功!';
}catch (PDOException $e){
echo $e->getMessage();
die;
}
$sql = "select * from fenlei";
$query = $connect->query($sql);
$result = $query->fetchAll(PDO::FETCH_ASSOC);
$result = array_values($result);
echo '<pre>';
print_r($result);
/**
* @param [array] $items [需要处理的数组]
* @return [array] [多维数组]
*/
function generateTree($result,$pid = 0)
{
$tree = array();
foreach($result as $key=>$item){
if($item['pid'] == $pid){
unset($result[$key]);
$child = generateTree($result, $item['id']);
if(!empty($child)){
$item['children'] = $child;
}
$tree[] = $item;
}
}
return $tree;
}
echo '<pre>';
print_r(generateTree($result));
得到结果:


浙公网安备 33010602011771号