J'ai travaillé sur un site qui utilise le système binaire mlm.Triez récursivement le tableau aux niveaux
J'ai donc deux tables dans la base de données, les utilisateurs ANAD relations. Il y a des colonnes ID et données personnelles dans les utilisateurs. Les relations ont 4 colonnes: ID, parentID, childID, pos. Où pos est soit à gauche ou à droite.
J'ai écrit avec succès une fonction qui répertorie récursivement tous les enfants de pid donné (parentID). Cependant j'ai besoin de le trier en niveaux (à des fins d'affichage et de calcul).
J'ai un tableau d'enfants de l'utilisateur ID = 1:
Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[2] => Array
(
[id] => 8
[parentID] => 4
[pos] => l
)
[3] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[4] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
[5] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[6] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
Maintenant, j'ai fonction nommée get_levels qui retourne un tableau multidimensionnel qui devrait ressembler à ceci:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 2
[parentID] => 1
[pos] => l
)
[1] => Array
(
[id] => 3
[parentID] => 1
[pos] => p
)
)
[1] => Array
(
[0] => Array
(
[id] => 4
[parentID] => 2
[pos] => l
)
[1] => Array
(
[id] => 5
[parentID] => 2
[pos] => p
)
[2] => Array
(
[id] => 6
[parentID] => 3
[pos] => l
)
[3] => Array
(
[id] => 7
[parentID] => 3
[pos] => p
)
)
ETC.
)
Voici la fonction:
function get_levels($pid,$level, $level_id){
$children = children_array($pid,1);
if (sizeof($children) > 0):
foreach ($children as $child):
if ($child["parentID"] == $pid):
get_levels($child["id"], $level, $level_id+1);
$level[$level_id][] = $child;
endif;
endforeach;
endif;
return $level;
}
fonction chi ldren_array ($ pid, $ depth) retourne les enfants ... pour $ depth = 1 il renvoie les enfants immédiats (0 ou 1 ou 2), pour $ depth = 0 il retourne tous les enfants
Quelqu'un peut-il m'aider avec ça? fonction? Je pense que la fonction fonctionne, cependant Je ne sais pas comment utiliser récursivement et ajouter au tableau.
J'ai trouvé cette classe d'arbre binaire: http://www.phpclasses.org/browse/file/11713.html Quelle devrait être la meilleure façon de stocker des données dans la base de données? ID | parentID | leftChildID | rightChildID? – Smaug
Pour les données, je ne ferais référence qu'au parent et à la position s'il n'y a pas d'autre moyen de le comprendre. Le noeud qui n'a pas de parent est la racine. –