Maison >développement back-end >tutoriel php >Explication détaillée de l'algorithme récursif PHP
Cet article présente principalement l'explication détaillée de l'algorithme récursif PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Lorsque vous rencontrez une structure de base de données qui doit être conçue pour les nœuds d'arborescence et une structure de données de nœud d'arborescence qui doit être lue ! Tout le monde choisira-t-il d’utiliser une requête de base de données pour obtenir l’arborescence ?
//曾经的数据库查询获取方式$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']); }
//Obtenir les résultats $res;
Remarque : Il faut dire que cette méthode est effectivement réalisable, mais son inconvénient est qu'il faut fixer combien de niveaux et un grand nombre d'exécuter des requêtes dans la base de données.
N'ignorez pas la consommation des requêtes de la base de données. Peu importe si les données sont petites, mais la quantité de données est grande. Cette méthode réalisable apportera un lourd fardeau au système !
Donc, tout le monde doit comprendre la vérité. Parfois, les opérations de base de données sont plus bénéfiques que les algorithmes des programmes PHP, et parfois c'est le contraire !
Dans le cas de ce nœud d'arbre de base, il est préférable d'utiliser un algorithme.
Algorithme de code PHP (implémentation du framework CI : pas de publicité !)
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; }
//L'avantage est que la vitesse de calcul est rapide, la consommation est faible et le niveau est variable. Cela signifie que quel que soit le nombre de niveaux écrits dans la base de données, l'algorithme peut être obtenu
Résultats :
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 ( ) ) ) ) )
Recommandations associées :
Python implémenté basé sur l'algorithme récursif Tour de Hanoï et la séquence de Fibonacci
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!