Obtenez tous les enfants, petits-enfants etc nœuds en vertu de parent à l'aide de php avec mysql résultats de la requête
J'ai essayé de comprendre mais je n'ai pas pris n'importe où.J'espère que quelqu'un peut venir à mon secours.
Mon problème est que je suis en utilisant la contiguïté de la liste modèle de données pour produire de ma hiérarchie de données mysql.Je peux récupérer le tableau (voir ci-dessous) dans un multidimension tableau avec le tableau associatif pour chaque élément. Ce que je veux faire est une fois que je reçois ce tableau , je veux obtenir un autre tableau avec tous les nœuds (enfant, petit-enfant, etc) en vertu d'un parent de l'id (y compris l'élément parent).J'ai juste ne peut pas séance d'entraînement comment code tihs en php.
Dans MySQL mon tableau s'affiche comme ceci:
id name parent_id
1 Electronics 0
2 Televisions 1
3 Portable Electronics 1
4 Tube 2
5 LCD 2
6 Plasma 2
7 Mp3 Players 3
8 CD Players 3
9 2 Way Radios 3
10 Flash 7
Je peux retrive toutes les lignes avec ce code dans un tableau associatif avec cette.
$r = mysql_query("SELECT * FROM test ");
$data = array();
while($row = mysql_fetch_assoc($r)) {
$data[] = $row;
}
Obtient Des Résultats:
Array
(
[0] => Array
(
[id] => 1
[name] => Electronics
[parent_id] => 0
)
[1] => Array
(
[id] => 2
[name] => Televisions
[parent_id] => 1
)
[2] => Array
(
[id] => 3
[name] => Portable Electronics
[parent_id] => 1
)
[3] => Array
(
[id] => 4
[name] => Tube
[parent_id] => 2
)
[4] => Array
(
[id] => 5
[name] => LCD
[parent_id] => 2
)
[5] => Array
(
[id] => 6
[name] => Plasma
[parent_id] => 2
)
[6] => Array
(
[id] => 7
[name] => Mp3 Players
[parent_id] => 3
)
[7] => Array
(
[id] => 8
[name] => CD Players
[parent_id] => 3
)
[8] => Array
(
[id] => 9
[name] => 2 Way Radios
[parent_id] => 3
)
[9] => Array
(
[id] => 10
[name] => Flash
[parent_id] => 7
)
)
Avec ces résultats, je veux filtre vers le bas avec un id.
Dire par exemple je voulais un tableau associatif de chaque nœud en vertu de l'Électronique Portable avec l'id de 3.(Utilisation de l'id pour le code)
Il serait de retour un tableau avec des lignes avec id:
- 3 appareils Électroniques Portables (parent Sélectionné doit être inclus)
- 7 Lecteurs Mp3 (Enfant)
- 8 lecteurs de CD (Enfant)
- 9 2 Radios bidirectionnelles (Enfant)
- 10 Flash (Grand Enfant)
si Flash a eu des enfants, il serait de retour.
De sorte que le résultat final serait de retourner un tableau comme celui ci-dessus, cependant, seulement avec ces éléments.
Veuillez noter:
Je ne cherche pas une fonction qui crée une multidimension tableau de la structure de l'arbre (Déjà trouvé une solution pour que) .Je veux construire une fonction: fetch_recursive($id), qui reçoit un IDENTIFIANT et renvoie tous les éléments de ce niveau et dans les niveaux inférieurs etc etc.
Espère que cette aide
Merci d'avance
fetch_recursive($id)
qui reçoit une ID
et renvoie tous les éléments de ce niveau et dans les niveaux inférieurs. sonne comme une simple fonction récursive. qu'avez-vous essayé de faire ? peut-on voir ton code ?Oui c'est ce que je suis après , j'ai essayé d'écrire un peu de code cependant il n'obtiendrez pas n'importe où 😐
Je vois ce que vous êtes après, maintenant. Voir ma solution révisée.
OriginalL'auteur Benny33 | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
Edit:
J'avais déjà posté une solution pour construire un tableau multidimensionnel de la sortie que vous avez donné comme bien comme un moyen d'obtenir tous les éléments enfants d'un particulier
id
de ce tableau. J'ai maintenant compris comment récupérer l'enfant des éléments directement à partir de votre sortie (sans avoir à passer par unbuildtree()
fonction:D'utiliser la fonction ci-dessus, il suffit de passer le tableau en sortie
$data
pour le premier argument et leid
vous souhaitez récupérer les éléments d'enfant à partir du second argument:ex.:
Qui devrait vous donner la bonne structure de tableau pour
id
3
(comme on le voit dans l'exemple de la dernière codebox à cette réponse).Réponse Originale À Cette Question:
Je n'avais jamais eu le temps d'en écrire une fonction récursive pour construire imbriqués les arbres de cette conception jusqu'à maintenant. Je suis sûr qu'il ya beaucoup d'autres qui ont écrit des fonctions similaires, mais cela ne devrait certainement travailler pour vous:
Cette fonction de manière récursive construire un arbre sur une liste d'adjacence et de garder l'id est ordonnée dans l'ordre croissant. Cela rend également le
id
's de chaque parent/enfant, la clé de chaque ensemble de données.Ce code:
Va afficher quelque chose comme ceci:
Pour obtenir tous les enfants-les nœuds d'un particulier
id
sur un tableau à une dimension, vous pouvez utiliser cette fonction:Basé sur la
buildtree()
fonction ci-dessus, disons que nous avons voulu obtenir tous les nœuds enfants deid
3:Ce sera de sortie:
cela fonctionne bien. Mais je veux voir si l'extraction récursive des enfants est possible en BFS. Si oui, alors s'il vous plaît poster le code.
Salut Zane pouvez-vous également expliquer comment imprimer arbre?
OriginalL'auteur Zane Bien
Ici est une façon d'aller plus loin, et vous pouvez décider de la façon dont vous construisez votre matrice de résultats et de ce que les champs que vous souhaitez inclure. Ce n'est pas testé, mais vous devriez voir la logique.
OriginalL'auteur Mike S.