Detailed explanation of PHP recursive algorithm

墨辰丷
Release: 2023-03-25 21:50:01
Original
5378 people have browsed it

This article mainly introduces the detailed explanation of PHP recursive algorithm. Interested friends can refer to it. I hope it will be helpful to everyone.

When you encounter the database structure of tree nodes that needs to be designed, and the tree node data structure that needs to be read out! Will everyone choose to use database query to obtain the tree structure?

//曾经的数据库查询获取方式$res = $this->db->query("select * from menu where pid = 0");foreach($res as 
$k=>$v){     $res[$k]['child'] = $this->db->query("select * from menu where pid =".$v['id']);
}
Copy after login

//Get the results $res;
Note: I have to say that this method is indeed feasible, but its disadvantage is that you need to fix how many levels you need, and a large number of running queries in the database.
Don’t ignore the query consumption of the database. It doesn’t matter if the data is small, but the amount of data is large. This feasible method will bring a great burden to the system!
Then, everyone must understand the truth. Sometimes database operations are more beneficial than PHP program algorithms, and sometimes the opposite is true!
In the case of this basic tree node, it is best to use the algorithm.

PHP code algorithm (CI framework implementation: not advertising!)

  public function getMenus(){
    //查询
    $res = $this->db->get('menu')->result_array();    $res = $this->getChild($res);
    print_r($res);
}/**
 * 递归 树节点算法
 * @param array $array
 * @param number $pid
 */private function getChild($array,$pid = 0){
    $data = array();    foreach ($array as $k=>$v){        //PID符合条件的
        if($v['pid'] == $pid){            //寻找子集
            $child = $this->getChild($array,$v['id']);            //加入数组
            $v['child'] = $child?:array(); 
            $data[] = $v;//加入数组中
        }
    }    return $data;
}
Copy after login

//The advantage of this is that the calculation speed is fast, the consumption is small, and the level is not determined. This means that no matter how many levels are written in the database, the algorithm can be obtained.
Result:

Array(

[0] => Array

    (

        [id] => 1
        [title] => PHP中文网
        [pid] => 0
        [sort] => 0
        [child] => Array
            (
            )

)
[1] => Array
    (
        [id] => 2
        [title] => 系统设置
        [pid] => 0
        [sort] => 99
        [child] => Array
            (
                [0] => Array
                    (
                        [id] => 4
                        [title] => 权限管理
                        [pid] => 2
                        [sort] => 2
                        [child] => Array
                            (
                            )

                    )

                [1] => Array
                    (
                        [id] => 5
                        [title] => 菜单栏目
                        [pid] => 2
                        [sort] => 0
                        [child] => Array
                            (
                            )

                    )

                [2] => Array
                    (
                        [id] => 3
                        [title] => 管理员
                        [pid] => 2
                        [sort] => 99
                        [child] => Array
                            (
                            )

                    )

            )

    )
)
Copy after login

Related recommendations:

Hanno implemented in Python based on recursive algorithm Towers and Fibonacci Sequences

PHP Implementation of the Recursive Algorithm for the Tower of Hanoi Problem and Implementation of the Iterative Algorithm

Recursion of the PHP Tower of Hanoi Problem Algorithm implementation and iterative algorithm implementation

The above is the detailed content of Detailed explanation of PHP recursive algorithm. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template