Exemple de requête php+mysql pour obtenir une sortie illimitée d'arborescence de classification de niveau inférieur

coldplay.xixi
Libérer: 2023-04-09 14:02:02
avant
3396 Les gens l'ont consulté

Exemple de requête php+mysql pour obtenir une sortie illimitée d'arborescence de classification de niveau inférieur

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);
Copier après la connexion

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; }
Copier après la connexion

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);
Copier après la connexion

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), );
Copier après la connexion
.

Le but est de le convertir dans la structure suivante :

电脑 —笔记本 ——-超级本 ——-游戏本 —台式机 手机 —智能机 —功能机
Copier après la connexion

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( //此处省略 ) ), ) ), //其他分类省略 )
Copier après la connexion

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]; } }
Copier après la connexion

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 ( ) ) )
Copier après la connexion

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!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!