PHP中的无限级分类、无限嵌套评论-php教程

资源魔 39 0

普通来讲,递归被称为函数本身的挪用。

递归正在开发中的实际运用

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;

而后咱们虚构出一些数据进去,最初长这个样子。

Snipaste_2019-06-19_13-04-46.png

上面 咱们间接看代码完成。

<?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的子目次,而后应用开端递归挪用。最初的输入是这个样子的。

Snipaste_2019-06-19_13-05-59.png

有限嵌套评论

先来看下这个 有限嵌套评论长甚么样子。如图:

Snipaste_2019-06-19_13-06-49.png

下面的栗子,又是一个经典的能够应用递归处理的案例。仍是来看下数据构造。

CREATE TABLE `co妹妹ents` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `co妹妹ent` 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;

各人能够本人理论一遍,先没有要看上面的内容。

<?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 `co妹妹ents` WHERE `postID` = :id ORDER BY `parentId`, `datetime`';
$stmt = $pdo->prepare($sql);
$stmt->setFetchMode(PDO::FETCH_OBJ);
$stmt->execute([':id' => 1]);
$result = $stmt->fetchAll();
$co妹妹ents = [];
foreach ($result as $co妹妹ent) {
    $co妹妹ents[$co妹妹ent->parentID][] = $co妹妹ent;
}
function showCo妹妹ents(array $co妹妹ents, $n)
{
    if (isset($co妹妹ents[$n])) {
        foreach ($co妹妹ents[$n] as $co妹妹ent) {
            echo str_repeat('-', $n) . $co妹妹ent->co妹妹ent . PHP_EOL;
            showCo妹妹ents($co妹妹ents, $co妹妹ent->id);
        }
    }
    return;
}
showCo妹妹ents($co妹妹ents, 0);

文件扫描

应用递归进行目次文件的扫描的栗子。

<?php
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教程栏目进行学习!

以上就是PHP中的有限级分类、有限嵌套评论的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 无限级分类 无限嵌套评论

抱歉,评论功能暂时关闭!