In daily development, it is more or less inevitable to encounter Infinitus classification problems, because Issues such as efficiency and logic have always made this type of problem 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.
This is the case tutorial about PHP Infinitus classification. I hope it will be helpful to you!