L'exemple de cet article décrit l'implémentation d'une sortie illimitée d'arborescence de classification de niveau inférieur via une requête php+mysql. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Le PHP introduit ici combiné avec MySQL pour interroger la sortie infinie de l'arborescence subordonnée est en fait une classification infinie. J'ai compilé pour vous plusieurs exemples de classification illimitée en PHP
[Recommandations d'apprentissage associées :programmation php(vidéo),tutoriel vidéo mysql]
Sortie de l'arbre :
function get_array($user_id,$top=0){ global $mysql,$_G; $sql = "select user_id as name from `{spreads_users}` where p1.spreads_userid='{$user_id}'"; $rows= $mysql->db_fetch_arrays($sql); if($top==1){ $arr[0]['name']=$user_id; $arr[0]['children']=array(); } $top=$top+1; foreach ($rows as $key=>$value) { $r = get_array($value['name']); //调用函数,传入参数,继续查询下级 $arr[0]['children'][$key]['name']= $value['username']; //组合数组 if(is_array($r)){ $arr[0]['children'][$key]['children']= $r[0]['children']; } $i++; } return $arr; } $list = get_array("1000",1); //调用函数1000是顶级ID echo 'var data='.json_encode($list);
Il s'agit du tableau de sortie puis transféré vers json
Exemple :
Structure de la table : le champ id est l'identifiant de classification, le nom field est le nom de la classification, le champ Father_id est l'identifiant de la catégorie parent à laquelle il appartient, le champ path est le chemin de la catégorie, qui stocke la collection des ancêtres de la catégorie, isdir détermine s'il s'agit d'un répertoire, 1 signifie oui , 0 signifie non.
Fonction d'affichage :
//$count为分类等级 sort_list($str,$fatherid,$count) { $rs = $this->sql->re_datas("select * from sort where father_id = fatherid"); $num = $this->sql->sql_numrows(); $i=0; $n = 1; while(isset($rs[$i])) { $name = ""; for($n = 1 ; $n < $count ; $n ) { $name.="│ "; } if($i 1==$num) { $name.="└─".$rs[$i][name]; } else { $name.="├─".$rs[$i][name]; } if($rs[$i][isdir]) { $str.="".$name.""; } else { $str.=$name"; } $temp = $count 1; $str = $this->sort_list($str,$rs[$i][id],$temp); $i ; } return $str; }
L'objet $this->sql est l'objet de classe d'opération SQL, la fonction re_datas() renvoie la requête. tableau, et la fonction sql_numrows() renvoie le numéro demandé.
est appelé Méthode :
$sort_list = sort_list($sort_list,0,1);
Exemple :
Tableau : catégorie
id int Clé primaire, incrémentation automatique
name varchar Nom de la catégorie
pid int Identifiant de la classe parent, la valeur par défaut est 0
Le pid par défaut de la catégorie supérieure est 0. Quand nous voulons pour supprimer l'arborescence des sous-catégories d'une certaine catégorie, l'idée de base est la récursion. Bien sûr, en raison de problèmes d'efficacité, cela n'est pas recommandé à chaque fois que la base de données est interrogée de manière récursive. L'approche habituelle consiste à d'abord extraire toutes les catégories, puis à les enregistrer. dans un tableau PHP, puis traitez-les. Enfin, les résultats peuvent être mis en cache pour améliorer l'efficacité de la requête suivante
Tout d'abord, construisez un tableau original, celui-ci peut être extrait directement de la base de données :
$categories = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name'=>'手机','pid'=>0), array('id'=>3,'name'=>'笔记本','pid'=>1), array('id'=>4,'name'=>'台式机','pid'=>1), array('id'=>5,'name'=>'智能机','pid'=>2), array('id'=>6,'name'=>'功能机','pid'=>2), array('id'=>7,'name'=>'超级本','pid'=>3), array('id'=>8,'name'=>'游戏本','pid'=>3), );
Le but est de le convertir dans la structure suivante :
电脑 —笔记本 ——-超级本 ——-游戏本 —台式机 手机 —智能机 —功能机
S'il est représenté par un tableau, une clé enfant peut être ajoutée pour le stocker. Sous-catégorie :
array( //1对应id,方便直接读取 1 => array( 'id'=>1, 'name'=>'电脑', 'pid'=>0, children=>array( &array( 'id'=>3, 'name'=>'笔记本', 'pid'=>1, 'children'=>array( //此处省略 ) ), &array( 'id'=>4, 'name'=>'台式机', 'pid'=>1, 'children'=>array( //此处省略 ) ), ) ), //其他分类省略 )
Traitement:
$tree = array(); //第一步,将分类id作为数组key,并创建children单元 foreach($categories as $category){ $tree[$category['id']] = $category; $tree[$category['id']]['children'] = array(); } //第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。 foreach ($tree as $k=>$item) { if ($item['pid'] != 0) { $tree[$item['pid']]['children'][] = &$tree[$k]; } }
print_r($tree); Le résultat de l'impression est le suivant :
Array ( [1] => Array ( [id] => 1 [name] => 电脑 [pid] => 0 [children] => Array ( [0] => Array ( [id] => 3 [name] => 笔记本 [pid] => 1 [children] => Array ( [0] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [1] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ) ) ) [1] => Array ( [id] => 4 [name] => 台式机 [pid] => 1 [children] => Array ( ) ) ) ) [2] => Array ( [id] => 2 [name] => 手机 [pid] => 0 [children] => Array ( [0] => Array ( [id] => 5 [name] => 智能机 [pid] => 2 [children] => Array ( ) ) [1] => Array ( [id] => 6 [name] => 功能机 [pid] => 2 [children] => Array ( ) ) ) ) [3] => Array ( [id] => 3 [name] => 笔记本 [pid] => 1 [children] => Array ( [0] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [1] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ) ) ) [4] => Array ( [id] => 4 [name] => 台式机 [pid] => 1 [children] => Array ( ) ) [5] => Array ( [id] => 5 [name] => 智能机 [pid] => 2 [children] => Array ( ) ) [6] => Array ( [id] => 6 [name] => 功能机 [pid] => 2 [children] => Array ( ) ) [7] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [8] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ) )
Avantages: La relation est claire et elle est facile de modifier la relation supérieur-subordonné.
Inconvénients: En utilisant PHP pour traiter, si le nombre de catégories est énorme, l'efficacité sera également réduite.
Recommandations associées :Cours vidéo de programmation
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!