J'ai un DB comme ceci:fonction PHP récursive pour l'affichage contiguïté liste
id text parent
1 Parent 1 0
2 Child of 1 1
3 Sibling 1
4 Another Parent 0
5 A first child 4
Je suis en train de capturer une structure arborescente ma liste des parents. Je suis conscient de l'autre option (jeux imbriqués je pense?) Mais je vais m'en tenir à cela pour l'instant. J'essaie maintenant de sortir les données de la base de données et dans une structure de tableau imbriquée dans PHP. J'ai une fonction comme ceci:
class Data_Manager
{
public $connection = '';
public $collection = array();
function __construct() {
$this->connection = mysql_connect('localhost', 'root', 'root');
$thisTable = mysql_select_db('data');
// error handling truncated
}
function get_all() {
$arr = &$this->collection;
$this->recurseTree('', 0, $arr);
var_dump($arr);
}
function recurseTree($parent, $level, $arrayNode) {
$result = mysql_query('SELECT * FROM tasks WHERE parent="' . $parent . '";');
while ($row = mysql_fetch_array($result)) {
$row['children'] = array(); //where I'd like to put the kids
$arrayNode[$row['id']]= $row;
$this->recurseTree($row['id'], $level+1, $arrayNode[$row['id']]);
}
}
}
Donc ce que je voudrais sortir avec une sorte d'arbre imbriqué de tableaux associatifs, mais je ne peux pas comprendre tout à fait comment faire. Rien ne semble être écrit dans le tableau que je passe, et je suis en quelque sorte perdre la trace de moi-même dans la récursivité. Quelqu'un peut-il me aider à franchir cette dernière bosse qui se traduira par quelque chose comme:
[
Parent1 => [
children => ['Child of 1', 'Sibling']
],
AnotherParent => [
children => ['First Child']
]
]
Je suis moins préoccupé par la forme spécifique de la sortie. Il sera transformé en JSON et je n'ai pas encore traité de l'écriture du gestionnaire côté client, donc pas de soucis sur la structure exacte.
Merci!
Avez-vous essayé de passer par la référence? – stillstanding
Je le fais quand je passe dans la variable d'instance originale $ collection; Je ne sais pas grand-chose sur la façon dont cela fonctionne, mais devrais-je l'utiliser tout au long de la récursivité pour toujours modifier le tableau 'mère'? –
voir http://stackoverflow.com/questions/3627878/php-mysql-retrieve-a-single-path-in-the-adjacency-list-model pour beaucoup de référence –