Frage

Es gibt Unmengen von Beispielen für den RecursiveIterator unter Verwendung eine Baumstruktur zu glätten .. aber was ist es mit einer Baumstruktur zu explodieren?

Gibt es eine elegante Art und Weise, diese zu verwenden oder eine andere SPL Bibliothek rekursiv einen Baum bauen (sprich: ein flaches Array in ein Array von beliebiger Tiefe drehen) gegeben eine Tabelle wie folgt aus:

SELECT id, parent_id, name FROM my_tree

EDIT: Sie wissen, wie Sie dies mit Verzeichnissen tun?

$it = new RecursiveDirectoryIterator("/var/www/images");
foreach(new RecursiveIteratorIterator($it) as $file) {
    echo $file . PHP_EOL;
}

.. Was ist, wenn Sie so etwas wie dies tun könnte:

$it = new RecursiveParentChildIterator($result_array);
foreach(new RecursiveIteratorIterator($it) as $group) {
    echo $group->name . PHP_EOL;
    // this would contain all of the children of this group, recursively
    $children = $group->getChildren();
}

: END EDIT

War es hilfreich?

Lösung

Obwohl nicht SPL, aber Sie können einen Baum mit nativen PHP Referenzen (&) aufbauen:

// untested
$nodeList = array();
$tree     = array();
foreach ($result as $row) {
    $nodeList[$row['id']] = array_merge($row, array('children' => array()));
}
foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent_id'] || !array_key_exists($node['parent_id'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent_id']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top