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']); }
//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; }
//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 ( ) ) ) ) )
Related recommendations:
Hanno implemented in Python based on recursive algorithm Towers and Fibonacci Sequences
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!