PHP: en Boucle par le biais de tableau multidimensionnel et d'établir des relations parent-enfant entre les éléments de tableau de
Je suis en train d'élaborer un système de gestion de contenu et j'ai couru dans un problème avec enfant-parent relations d'articles dans le CMS.
Fondamentalement, j'ai un système qui permet de créer des pages et quand une page est créée, vous pouvez sélectionner une page parent pour les sous-navigation. C'est toute fine et dandy jusqu'à ce que j'essaie de générer de la navigation à partir de la DB.
Je ne suis pas sûr si une sorte de jointure serait mieux, mais je préfère à obtenir toutes les données dans un tableau et de manipuler le tableau avec php.
Mon tableau de résultats à partir de la DB est comme ceci:
Array
(
[0] => Array
(
[id] => 27
[name] => home
[link] => home.html
[parent] => 0
)
[1] => Array
(
[id] => 30
[name] => about
[link] => about.html
[parent] => 27
)
)
J'ai besoin de parcourir un tableau, comme ce qui peut avoir un nombre quelconque de navigation et en intelligence, et de les trier dans son les relations parent-enfant. J'ai été en mesure de le faire, mais un seul niveau de profondeur. Il doit gérer des enfants avec enfants avec enfants, etc. avec un nombre infini de couches et la sortie en HTML non ordonnée des listes imbriquées.
<ul>
<li>
<a>Nav</a>
<ul>
<li>
<a>Subnav</a>
<ul>
<li>
<a>Sub Sub nav</a>
</li>
</ul>
</li>
</ul>
<li>
<ul>
Etc. ...
OriginalL'auteur Laurence | 2011-12-31
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous devriez obtenir dans les objets. En Plus je pense qu'il serait juste de travail supplémentaire pour générer des objets et etc. À mon avis vous devriez parcourir le tableau et de générer un tableau multidimensionnel qui représente la hiérarchie de navigation et ensuite une boucle générés tableau de manière récursive pour générer votre code HTML. J'ai fait un exemple de code pour vous, il fonctionne de la façon dont vous le souhaitez, mais vous voudrez probablement faire quelques changements.
fonctions
** exemple d'utilisation **
Vous pouvez probablement faire les deux choses en une seule étape, mais je pense que c'est plus lisible pour générer le tableau multidimensionnel en premier. Goodluck!
Super! Merci Monsieur!
OriginalL'auteur Saad Imran.
Saad Imran la solution fonctionne bien, sauf pour si vous souhaitez plusieurs éléments de navigation, dans la même liste. J'ai dû changer quelques lignes de l'obtenir pour générer de la liste validée des éléments. J'ai aussi ajouté des tirets pour rendre le code généré plus lisible. Je suis à l'aide d'espaces, mais cela peut être facilement modifié pour les onglets si vous préférez, il suffit de remplacer 4 places avec
"\t"
. (remarque: vous devez utiliser des guillemets, pas de guillemets simples, sinon php ne la remplace pas par un caractère de tabulation, mais réellement un \t)Je suis en utilisant ce dans codeigniter 2.1.0 avec superfish (PHP5)
J'ai été faire (passé à l'ol de clarification)
maintenant, je reçois
Joliment HTML généré
OriginalL'auteur vortextangent
La façon la plus simple de le faire ce serait probablement à l'aide d'objets. Ceux-ci peuvent être facilement manipulés et a également créé très facilement à partir de la matrice que vous obtenez à partir de la base de données.
Un exemple, chaque objet a:
Vous aurez besoin d'une fonction statique qui est en mesure de savoir quel objet a une certaine ID de base de données. Cela se fait lors de la création d'un nouvel objet, en mettant une référence dans une liste statique. Cette liste peut ensuite être appelé et vérifié par rapport au moment de l'exécution.
Le reste est assez simple:
Comme pour le retour des objets dans une liste, c'est mieux de le faire de manière récursive;
OriginalL'auteur Qqwy
Je suis en train de travailler sur le même projet, et je n'ai pas trouvé de trouvé de la nécessité d'utiliser des objets. La base de données à peu près prend soin de la structure et des fonctions php peut faire le reste. Ma solution a été d'avoir un champ parent pour les pages qui pointe vers un nom de section, comme vous, mais aussi pour ajouter un champ parent pour les sections de la table, de sorte que les sections peuvent pointer vers d'autres sections comme les parents. Il est toujours très facile à gérer parce qu'il y a seulement 2 parent champs de garder une trace de, une pour chaque table, et je peux le nid de ma structure autant de niveaux que nécessaire dans l'avenir.
Donc pour la dynamique de création de l'arbre généalogique, je vais vérifier de manière récursive pour les parents que j'ai frappé un null, ce qui m'indique que l'élément en cours se trouve sur la doc de la racine. De cette façon, nous n'avons pas besoin de connaître tous les détails de l'actuelle structure de la page dans le code de la fonction, et nous pouvons nous concentrer sur l'ajout et l'organisation des pages dans mysql. Depuis une autre affiche a montré une certaine menu html, j'ai pensé que je voudrais ajouter un exemple ici pour une dynamique de fil d'ariane chemin, car les thèmes sont très similaires.
DONNÉES
FONCTIONS
UTILISATION
SORTIE
sample-page-1.php || test.com > page 1
sample-page-2.php || test.com > bonjour > page 2
sample-page-3.php || test.com > bonjour > > page 3
OriginalL'auteur