Maison > développement back-end > tutoriel php > Plusieurs façons d'implémenter efficacement les sous-catégories de requêtes en boucle en PHP

Plusieurs façons d'implémenter efficacement les sous-catégories de requêtes en boucle en PHP

PHPz
Libérer: 2024-03-06 16:56:02
original
466 Les gens l'ont consulté

Plusieurs façons dimplémenter efficacement les sous-catégories de requêtes en boucle en PHP

PHP est un langage de script côté serveur couramment utilisé dans le développement Web. Dans le développement PHP, nous rencontrons souvent des situations où nous devons interroger et afficher des catégories et leurs sous-catégories. Cet article explorera plusieurs façons d'implémenter efficacement des sous-catégories de requêtes en boucle et donnera des exemples de code spécifiques.

Première méthode : requête récursive

La récursion est une méthode courante pour parcourir une structure arborescente et convient pour interroger des classifications imbriquées. Voici un exemple de code pour une sous-catégorie de requête récursive simple :

function getSubcategories($category_id) {
    $subcategories = [];
    $query = "SELECT id, name FROM categories WHERE parent_id = $category_id";
    $result = mysqli_query($connection, $query);
    
    while ($row = mysqli_fetch_assoc($result)) {
        $subcategories[] = $row;
        $subcategories = array_merge($subcategories, getSubcategories($row['id']));
    }
    
    return $subcategories;
}

$category_id = 1;
$subcategories = getSubcategories($category_id);
print_r($subcategories);
Copier après la connexion

Deuxième méthode : utiliser la fonction de fermeture

La fonction de fermeture est une fonctionnalité puissante de PHP, qui peut définir des fonctions anonymes à l'intérieur de la fonction et en dehors du transfert de fonction. Voici un exemple de code qui utilise des fonctions de fermeture pour implémenter des sous-catégories de requête :

$categories = [];

$fetchCategories = function ($parent_id) use (&$fetchCategories, &$categories) {
    $query = "SELECT id, name FROM categories WHERE parent_id = $parent_id";
    $result = mysqli_query($connection, $query);

    while ($row = mysqli_fetch_assoc($result)) {
        $categories[] = $row;
        $fetchCategories($row['id']);
    }
};

$fetchCategories(1);
print_r($categories);
Copier après la connexion

Troisième méthode : utilisez une requête récursive et stockez-la dans un tableau

Obtenez toutes les catégories dans une requête de base de données, puis utilisez le code PHP pour créer de manière récursive l'arborescence des sous-catégories. Voici un exemple de code :

$query = "SELECT id, name, parent_id FROM categories";
$result = mysqli_query($connection, $query);

$categories = [];
while ($row = mysqli_fetch_assoc($result)) {
    $categories[$row['id']] = $row;
}

$nestedCategories = [];
foreach ($categories as $id => $category) {
    if ($category['parent_id'] == 0) {
        $nestedCategories[$id] = $category;
    } else {
        $categories[$category['parent_id']]['children'][$id] = $category;
    }
}

print_r($nestedCategories);
Copier après la connexion

Grâce aux trois méthodes ci-dessus, nous pouvons implémenter efficacement des sous-catégories de requêtes en boucle. Choisir une méthode adaptée aux besoins du projet et à la structure des données peut améliorer l'efficacité du code et réduire le nombre de requêtes de base de données, optimisant ainsi les performances du programme. J'espère que le contenu ci-dessus vous sera utile.

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:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal