Maison >développement back-end >Problème PHP >[Partage du résumé] Méthode efficace de sous-catégorie de requête en boucle PHP
Dans le domaine du développement web, la requête de classification est une exigence très courante. Qu'il s'agisse d'une plateforme de commerce électronique ou d'un système de gestion de contenu, il existe une méthode d'affichage des données basée sur la classification. À mesure que le nombre de couches de classification augmente, la tâche d'interrogation des sous-catégories devient de plus en plus complexe. Cet article présentera une méthode de requête en boucle PHP efficace pour les sous-catégories afin d'aider les développeurs à gérer facilement les hiérarchies de catégories.
Tout d'abord, nous devons obtenir des données classifiées. Ici, nous prenons une simple table de base de données comme exemple. Supposons que cette table soit nommée catégorie et comporte les champs suivants :
id | name | parent_id |
---|---|---|
1 | Home appliances | 0 |
2 | Mobile numérique | 0 |
3 | TV | 1 |
4 | Réfrigérateur | 1 |
5 | Téléphone portable | 2 |
6 | Ordinateur portable | 2 |
Parmi eux, id est l'identifiant unique de la catégorie, name est le nom de la catégorie et parent_id est l'identifiant de la catégorie parent à laquelle appartient la catégorie. Si la catégorie n'a pas de catégorie parent, parent_id est 0.
Ensuite, nous pouvons créer une fonction de requête qui recevra l'identifiant d'une catégorie parent en tant que paramètre et renverra toutes les sous-catégories de la catégorie parent.
function get_children_categories($parent_id) { // <code to query categories from database by parent_id> return $categories; }
Dans le code ci-dessus, nous interrogerons toutes les sous-catégories de la base de données et les renverrons pour notre utilisation ultérieure.
Pour les situations avec plusieurs niveaux de sous-catégories, nous avons besoin d'une méthode de requête récursive. Autrement dit, nous devons interroger de manière récursive vers le bas en commençant par le nœud racine jusqu'à ce que nous trouvions la sous-catégorie requise.
L'implémentation spécifique du code est la suivante :
function get_children_categories($parent_id) { $categories = array(); // <code to query categories from database by parent_id> foreach($results as $result) { $category = array(); $category['id'] = $result['id']; $category['name'] = $result['name']; $children = get_children_categories($result['id']); if (!empty($children)) { $category['children'] = $children; } $categories[] = $category; } return $categories; }
Le code ci-dessus interroge récursivement les sous-catégories de chaque catégorie couche par couche et les ajoute à l'ensemble de résultats, construisant ainsi une hiérarchie de classification complète. Dans ce processus, nous utiliserons la boucle foreach de PHP et appellerons récursivement nos propres méthodes.
Maintenant que nous avons réussi à obtenir une hiérarchie complète des catégories, nous pouvons les parcourir à l'aide d'une boucle foreach.
function print_categories($categories) { echo "<ul>"; foreach($categories as $category) { echo "<li>" . $category['name'] . "</li>"; if (!empty($category['children'])) { print_categories($category['children']); } } echo "</ul>"; }
Ici, nous allons parcourir chaque catégorie et afficher leurs noms. Si la catégorie contient des sous-catégories, appelez votre propre méthode de manière récursive et imprimez toutes les sous-catégories.
Lors de la mise en œuvre du code ci-dessus, nous avons pris en compte les performances du code. En particulier pour les hiérarchies de classification comportant un grand nombre de sous-catégories, vous pouvez rencontrer des goulots d'étranglement en termes de performances lors d'interrogations récursives. Afin de résoudre ce problème, nous pouvons utiliser un mécanisme de mise en cache pour mettre en cache les résultats en mémoire afin d'améliorer la vitesse des requêtes. Ici, nous pouvons utiliser l'extension memcached de PHP pour mettre en cache le jeu de résultats en mémoire et obtenir les résultats directement à partir du cache dans les requêtes suivantes.
$memcached = new Memcached(); $memcached->addServer('localhost', 11211); $categories = $memcached->get('categories:1'); if (!$categories) { $categories = get_children_categories(1); $memcached->set('categories:1', $categories); } print_categories($categories);
Dans le code ci-dessus, nous avons d'abord établi une connexion client memcached et mis en cache les résultats de la classification dans la clé de cache nommée "categories:1". Dans les requêtes suivantes, nous pouvons obtenir les résultats directement à partir du cache sans réexécuter la fonction de requête. Cette approche peut améliorer considérablement les performances des requêtes, en particulier pour les données catégorielles à grande échelle.
Cet article présente une méthode efficace d'interrogation de sous-catégories dans une boucle PHP. En interrogeant récursivement les sous-catégories couche par couche et en utilisant le mécanisme de mise en cache, nous pouvons facilement gérer la hiérarchie de classification, améliorer l'efficacité des requêtes et fournir une méthode de requête de classification plus pratique pour le développement Web.
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!