Maison > développement back-end > tutoriel php > Comment créer de manière récursive un tableau multidimensionnel à partir des résultats d'une base de données plate ?

Comment créer de manière récursive un tableau multidimensionnel à partir des résultats d'une base de données plate ?

Barbara Streisand
Libérer: 2024-12-14 01:40:10
original
266 Les gens l'ont consulté

How to Recursively Build a Multidimensional Array from Flat Database Results?

Création récursive d'un tableau multidimensionnel à partir des résultats de la base de données

Pour récupérer des structures de données hiérarchiques, telles que des menus de pages et de catégories, à partir d'un résultat de base de données plat , une fonction récursive peut être utilisée. Cette fonction prendra le tableau d'origine et l'organisera en tableaux imbriqués en fonction des relations parent-enfant.

La fonction :

function buildTree(array $elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }

    return $branch;
}
Copier après la connexion

Comment ça marche :

  1. La fonction prend en compte un tableau d'éléments et un ID parent facultatif, par défaut 0.
  2. Il parcourt chaque élément du tableau.
  3. Si l'ID parent d'un élément correspond à l'ID parent spécifié, il est considéré comme un enfant de ce parent.
  4. Le la fonction s'appelle récursivement pour trouver tous les enfants de l'élément enfant actuel.
  5. Si l'élément a des enfants, ils sont ajoutés sous forme de tableau sous la clé 'enfants' de l'élément actuel.
  6. Enfin, la fonction renvoie le tableau d'éléments enfants pour le parent donné.

Exemple d'utilisation :

Pour convertir le résultat de la base de données d'exemple en un tableau multidimensionnel à l'aide de cette fonction :

$tree = buildTree($rows);
Copier après la connexion

Où $rows est le tableau d'origine de la base de données résultats.

Sortie :

Le tableau hiérarchique résultant ressemblera à la sortie souhaitée :

Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => 0
            [title] => Parent Page
            [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 2
                                    [parent_id] => 1
                                    [title] => Sub Page
                                    [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 3
                                                            [parent_id] => 1
                                                            [title] => Sub Sub Page
                                                        )
                                                )
                                )
                        )
            [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 4
                                    [parent_id] => 0
                                    [title] => Another Parent Page
                                    [children] => Array
                                                (

                                                )
                                )
                        )
        )
)
Copier après la connexion

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!

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