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 = new PDO($dsn, $username, $password);

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

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

$categories = [];foreach ($result as $category) {

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

}function showCategoryTree($categories, $n){    if (isset($categories[$n])) {        foreach ($categories[$n] as $category) {            echo str_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 = new PDO($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 ($result as $comment) {

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

}

function showComments(array $comments, $n)

{

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

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

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

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

        }

    }

    return;

}

showComments($comments, 0);

文件扫描

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

function showFiles(string $dir, array &$allFiles)

{

    $files = scandir($dir);

    foreach ($files as $key => $value) {

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

        if (!is_dir($path)) {

            $allFiles[] = $path;

        } else if ($value != "." && $value != "..") {

            showFiles($path, $allFiles);

            $allFiles[] = $path;

        }

    }

    return;

}

$files = [];

showFiles('.', $files);

foreach ($files as $file) {

    echo $file . PHP_EOL;

}

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

-END-

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

php无极分类非递归_PHP中的无限级分类、无限嵌套评论相关推荐

  1. php无极分类非递归_php实现无限级分类(递归方法)

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 到网上一搜php无限极分类,很多 ...

  2. 二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)

    文章目录 二叉树的层序遍历 前序遍历 递归版本 非递归版本 中序遍历 递归版本 非递归版本 后序遍历 递归版本 非递归版本 二叉树的层序遍历 void printTree(BinaryTree* ar ...

  3. python实现二叉树非递归前中后序遍历

    python实现二叉树非递归前中后层序遍历 二叉树是数据结构中重要的一部分,本文简单介绍用python实现二叉树的前中后序遍历,包括递归和非递归思路算法. # -*- 二叉树 begin -*- # ...

  4. php无极分类非递归_无限极分类算法,对你一定有帮助

    无限级分类是开发中常见的情况,也经常会在面试,主考官问到,笔试中遇到,因此本文对常见的无限极分类算法进行总结归纳,其实大多数就是迭代与递归. 1.循环迭代实现 $arr = [1=>['id'= ...

  5. 数据结构 非递归实现中序遍历二叉树

    参考书籍:c++ 数据结构 之前提到用递归的方法实现中序遍历二叉树,但是递归会浪费大量的空间与时间.这时候我们就在想用没有一种方式能够不依赖递归去实现遍历二叉树.我们之前学过一种数据结构可以实现这种方 ...

  6. java 快排非递归_C++ 中快排的递归和非递归实现

    快排的递归 void quickSort1(int* root,int low,int high) { int pat=root[low]; if(low { int i=low,j=high; wh ...

  7. 中图法分类号 计算机视觉方面,中图法分类号tp39中国图象图形学报.doc

    中图法分类号tp39中国图象图形学报 中图法分类号:TP391.4 文献标识码:A 文章编号: 论文引用格式: 利用背景加权和选择性子模型更新的视觉跟踪算法 黄安奇,侯志强,余旺盛,刘翔 空军工程大学 ...

  8. php for嵌套循环_PHP中的for循环怎样嵌套

    本篇文章主要介绍 PHP中的for循环怎样嵌套,感兴趣的朋友参考下,希望对大家有所帮助. for循环的执行原理: for循环的参数有(初始值:判断条件:更新循环变量表达式) 三者均不是必须的,若三者不 ...

  9. 【转】Treeview 无限分类非递归终极解决方案

    表结构如下 表名 Test 写个存储过程 GetTreeview 这个不用我说了吧下面用到 为了速度缓存DataTable Public Function GetTreeTable() As Data ...

最新文章

  1. pyqt4+chatterbot实现简单聊天机器人程序
  2. 华为鲲鹏产业生态加速算力升级,企业数字化转型在山西吹响号角
  3. 程序员杂记:我们的爱情故事
  4. Winform中实现根据CPU和硬盘获取机器码
  5. php实现上传,PHP实现文件上传例子
  6. CODEVS——T1519 过路费
  7. linux远程画面同步,如何使VNC和Linux tty7 显示同步效果
  8. Python项目:生成微信好友头像拼接图
  9. [django]Django输出页面方式的补充
  10. 小程序页面启动过程分析
  11. 360网神防火系统 配置端口映射_IIS配置证书端口443无法访问
  12. 解决atomikos在oracle应用中的XA事务异常 Error in recovery
  13. Processing编程学习指南2.5 Processing中的代码
  14. 南大网院计算机基础第一次作业,南大网院2015计算机基础第一次作业.docx
  15. 关于扫雷的c语言程序设计,C语言程序设计扫雷游戏实验报告
  16. 【XXPHP源代码】把多个JS广告代码放到一个JS文件并调用
  17. DEM文件投影/基准面转换出现的问题
  18. 移动硬盘如何恢复数据
  19. 《论工业社会及其未来》—泰德.卡辛斯基
  20. P2P下载技术-BT协议与Magnet磁力链接

热门文章

  1. UVA10450 POJ1953 World Cup Noise【斐波那契数列】
  2. 面向对象(OOP)五大基本原则
  3. 新技能 get —— Python 断点续传下载文件
  4. 数据结构与算法 —— 动态数组
  5. CentOs虚拟机NAT模式下静态IP的配置
  6. VS 2013 统一修改所有工程的目录配置(以 boost、opencv3 的安装为例)
  7. python技巧——list comprehension vs map
  8. 如何让ul的符号隐藏_HTML+CSS之如何找BUG
  9. 微信二次修改微信号_微信正测试微信号修改功能:一年只有一次机会
  10. python数字类型及运算_Python基础教程:运算符以及数据类型解析