Maison >développement back-end >tutoriel php >Comment convertir efficacement les relations parent-enfant en arbres hiérarchiques imbriqués ?

Comment convertir efficacement les relations parent-enfant en arbres hiérarchiques imbriqués ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 04:24:13604parcourir

How to Efficiently Convert Parent-Child Relationships into Nested Hierarchical Trees?

Conversion des relations parent-enfant en arbres hiérarchiques

Problème :

Étant donné un ensemble de paires nom-nom-parent représentant des relations, la tâche est de les transformer en un nombre minimal de structures arborescentes imbriquées. Par exemple, avec l'entrée suivante :

Child : Parent
    H : G
    F : G
    G : D
    E : D
    A : E
    B : C
    C : E
    D : NULL

Le résultat attendu est une série d'arbres hiérarchiques :

D
├── E
│   ├── A
│   │   └── B
│   └── C   
└── G
    ├── F
    └── H

Le but est de générer des arbres

    éléments avec chaque
  • contenant le nom de l'enfant.

    Solution :

    Pour convertir efficacement l'entrée en une structure arborescente hiérarchique, une approche récursive est utilisée. Les fonctions suivantes sont définies :

    function parseTree($tree, $root = null): array
    {
        $return = [];
        foreach ($tree as $child => $parent) {
            if ($parent == $root) {
                unset($tree[$child]);
                $return[] = [
                    'name' => $child,
                    'children' => parseTree($tree, $child),
                ];
            }
        }
        return empty($return) ? null : $return;    
    }
    
    function printTree($tree)
    {
        if (!is_null($tree) && count($tree) > 0) {
            echo '<ul>';
            foreach ($tree as $node) {
                echo '<li>'.$node['name'];
                printTree($node['children']);
                echo '</li>';
            }
            echo '</ul>';
        }
    }

    Utilisation :

    $result = parseTree($tree);
    printTree($result);

    Cette approche analyse d'abord l'entrée, créant une structure arborescente hiérarchique au format tableau. Par la suite, il parcourt l'arborescence, générant l'élément

      éléments.

      Fonction combinée :

      Pour une mise en œuvre plus efficace, une version combinée des deux fonctions peut être créée :

      function parseAndPrintTree($root, $tree)
      {
          if (!is_null($tree) && count($tree) > 0) {
              echo '<ul>';
              foreach ($tree as $child => $parent) {
                  if ($parent == $root) {                    
                      unset($tree[$child]);
                      echo '<li>'.$child;
                      parseAndPrintTree($child, $tree);
                      echo '</li>';
                  }
              }
              echo '</ul>';
          }
      }

      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