1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php无极分类非递归_PHP中的无限级分类 无限嵌套评论

php无极分类非递归_PHP中的无限级分类 无限嵌套评论

时间:2021-09-08 15:07:52

相关推荐

php无极分类非递归_PHP中的无限级分类 无限嵌套评论

php中文网最新课程

每日17点准时技术干货分享

一般来说,递归被称为函数自身的调用。

递归在开发中的实际运用

N级分类

无限级的分类在平常的开发中是常见的需求,并且在不少面试题中都会碰到。不管你做什么项目,应该都碰到过类似的问题。下面,我们就使用递归的思想,实战一把。

SQL结构

CREATE TABLE `categories` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`categoryName` varchar(100) NOT NULL,

`parentCategory` int(11) DEFAULT'0',

`sortInd` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

然后我们虚拟出一些数据出来,最后长这个样子。

下面,我们直接看代码实现。

<?php$dsn="mysql:host=127.0.0.1;port=3306;dbname=light-tips;charset=UTF8;";

$username='root';

$password='admin';

$pdo=newPDO($dsn,$username,$password);

$sql='SELECT * FROM `categories` ORDER BY `parentCategory`, `sortInd`';

$result=$pdo->query($sql, PDO::FETCH_OBJ);

$categories= [];foreach($resultas$category) {

$categories[$category->parentCategory][] =$category;

}functionshowCategoryTree($categories,$n){if(isset($categories[$n])) {foreach($categories[$n]as$category) {echostr_repeat('-',$n) .$category->categoryName . PHP_EOL;

showCategoryTree($categories,$category->id);

}

}return;

}

showCategoryTree($categories, 0);

可以看到,我们首先获取到了所有的数据,然后按照父级ID归类。这是一个非常棒的数据结构。想象一下,我们把展示顶级目录下所有子目录的问题分解成了展示自己的类目标题和展示数据中parentCategory为当前目录id的子目录,然后使用开始递归调用。最后的输出是这个样子的。

无限嵌套评论

先来看下这个,无限嵌套评论长什么样子,如图:

上面的栗子,又是一个经典的可以使用递归解决的案例,还是来看下数据结构。

CREATE TABLE `comments` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`comment` varchar(500) NOT NULL,

`username` varchar(50) NOT NULL,

`datetime` datetime NOT NULL,

`parentID` int(11) NOT NULL,

`postID` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

大家可以自己实践一遍,先不要看下面的内容。

$dsn="mysql:host=127.0.0.1;port=3306;dbname=light-tips;charset=UTF8;";

$username='root';

$password='admin';

$pdo=newPDO($dsn,$username,$password);

$sql='SELECT * FROM `comments` WHERE `postID` = :id ORDER BY `parentId`, `datetime`';

$stmt=$pdo->prepare($sql);

$stmt->setFetchMode(PDO::FETCH_OBJ);

$stmt->execute([':id'=> 1]);

$result=$stmt->fetchAll();

$comments= [];

foreach($resultas$comment) {

$comments[$comment->parentID][] =$comment;

}

functionshowComments(array$comments,$n)

{

if(isset($comments[$n])) {

foreach($comments[$n]as$comment) {

echostr_repeat('-',$n) .$comment->comment . PHP_EOL;

showComments($comments,$comment->id);

}

}

return;

}

showComments($comments, 0);

文件扫描

使用递归进行目录文件的扫描的栗子。

functionshowFiles(string$dir,array&$allFiles)

{

$files= scandir($dir);

foreach($filesas$key=>$value) {

$path=realpath($dir. DIRECTORY_SEPARATOR .$value);

if(!is_dir($path)) {

$allFiles[] =$path;

}elseif($value!="."&&$value!="..") {

showFiles($path,$allFiles);

$allFiles[] =$path;

}

}

return;

}

$files= [];

showFiles('.',$files);

foreach($filesas$file) {

echo$file. PHP_EOL;

}

以上就是PHP中的无限级分类、无限嵌套评论的详细内容,更多请关注php中文网其它相关文章!

-END-

声明:本文选自「php中文网」,搜索「 phpcnnew 」即可关注!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。