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
Barbara Streisandoriginal
2024-12-14 01:40:10265parcourir

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;
}

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);

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
                                                (

                                                )
                                )
                        )
        )
)

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!

Déclaration:
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