Maison >développement back-end >tutoriel php >Explication détaillée de l'algorithme récursif PHP

Explication détaillée de l'algorithme récursif PHP

墨辰丷
墨辰丷original
2018-05-16 11:53:345421parcourir

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

Implémentation d'un algorithme récursif et implémentation d'un algorithme itératif du problème PHP de la Tour de Hanoï

PHP Tour de Problème de Hanoi Implémentation d'algorithmes récursifs et implémentation d'algorithmes itératifs

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn