Home > Article > Backend Development > Let’s talk about a case of PHP Infinitus classification, PHP classification case_PHP tutorial
Author: Bailang Source: http://www.manks.top/php_tree_deep.html The copyright of this article belongs to the author , you are welcome to reprint, but this statement must be retained without the author's consent, and a link to the original text must be provided in an obvious position on the article page, otherwise we reserve the right to pursue legal liability. The original article has pictures.
In daily development, it is more or less inevitable to encounter the problem of Infinitus classification, because problems such as efficiency and logic have always made such problems more acute. Today we use the yii2 framework as the basis and the column Infinitus as an example to conduct a simple treatment of this problem.
First we have a column data table tree
The table structure is as shown below (original text with pictures)
The table structure looks very simple.
Let’s insert some test data
INSERT INTO `tree` (`id`, `parent_id`, `name`) VALUES (1, 0, 'A'), (2, 0, 'B'), (3, 1, 'a'), (4, 3, 'aa'), (5, 2, 'b'), (6, 4, 'aaa');
The tree structure is roughly as follows
|A |--a |----aa |------aaa |B |--b
This is exactly the data structure form we need. Let’s see how to process it to get the required results.
As we said before, it is based on yii2, so our writing method also follows object-oriented rules
class tree { //访问index查看树形结构 public function actionIndex () { $data = self::getTree(); //为了方便测试,我们这里以json格式输出 \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return $data; } //获取树 public static function getTree () { //这里我们直接获取所有的数据,然后通过程序进行处理 //在无限极分类中最忌讳的是对数据库进行层层操作,也就很容易造成内存溢出 //最后电脑死机的结果 $data = static::find()->all(); return self::_generateTree($data); } //生成树 private static function _generateTree ($data, $pid = 0) { $tree = []; if ($data && is_array($data)) { foreach($data as $v) { if($v['parent_id'] == $pid) { $tree[] = [ 'id' => $v['id'], 'name' => $v['name'], 'parent_id' => $v['parent_id'], 'children' => self::_generateTree($data, $v['id']), ]; } } } return $tree; } }
Let’s visit tree/index and take a look. The rendering is as follows
In this way we can see a very clear tree structure diagram, which is what we ultimately need.