Maison  >  Article  >  base de données  >  Comment convertir les résultats d’une base de données en objets de tableau hiérarchique ?

Comment convertir les résultats d’une base de données en objets de tableau hiérarchique ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 17:04:03649parcourir

How to Convert Database Results into Hierarchical Array Objects?

Conversion des résultats de la base de données en objets de tableau hiérarchique

Implémentation d'une hiérarchie basée sur une table de fermeture

Pour représenter efficacement les données hiérarchiques, envisagez d'utiliser une table de fermeture. Dans ce contexte, une table de fermeture entretient les relations entre les ancêtres et les descendants d'une structure arborescente, ce qui rend efficace la récupération et la représentation de la hiérarchie.

Interrogation des données hiérarchiques

Pour interroger la structure arborescente, nous peut exécuter une requête SQL qui récupère les descendants d'un nœud donné ainsi que leurs niveaux dans la hiérarchie. Voici un exemple de requête qui récupère les descendants jusqu'à un niveau spécifié :

SELECT d.*, p.a AS '_parent'
FROM longnames AS a
JOIN closure AS c ON (c.a = a.tsn)
JOIN longnames AS d ON (c.d = d.tsn)
LEFT OUTER JOIN closure AS p ON (p.d = d.tsn AND p.l = 1)
WHERE a.tsn = ? AND c.l <= ?
ORDER BY c.l;

Traitement des résultats de la requête

Une fois les résultats de la requête récupérés, nous pouvons les traiter pour créer une structure de tableau hiérarchique. Cela implique de trier les lignes par hiérarchie et de les regrouper en conséquence, en créant un tableau avec des nœuds en tant qu'objets avec à la fois des données et des tableaux enfants.

Objets de lignes personnalisés

Pour améliorer la structure du tableau, nous pouvons créer Objets Row personnalisés qui contiennent un tableau associatif de données de ligne ainsi qu'un objet Rowset pour leurs enfants. L'ensemble de lignes enfants pour les nœuds feuilles est vide.

Méthode toArrayDeep()

Les classes personnalisées peuvent également inclure des méthodes telles que toArrayDeep() qui convertissent de manière récursive leur contenu de données en un tableau simple, permettant ainsi une exportation facile des données. .

Exemple d'utilisation

Pour utiliser ce système, on peut d'abord obtenir une instance de la passerelle de données de table de taxonomie, puis récupérer la structure arborescente souhaitée :

// Get an instance of the taxonomy table data gateway
$tax = new Taxonomy();

// Query tree starting at Rodentia (id 180130), to a depth of 2
$tree = $tax->fetchTree(180130, 2);

// Dump out the array
var_export($tree->toArrayDeep());

Supplémentaire Notes

Pour déterminer la profondeur de chaque chemin, vous pouvez insérer de nouveaux nœuds dans la table de fermeture, en calculant le niveau approprié en fonction de l'endroit où ils sont ajoutés dans la hiérarchie. La fonction LAST_INSERT_ID() peut être utile pour obtenir l'ID des nœuds nouvellement insérés.

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