J'essaie de récupérer des données hiérarchiques à partir d'une table mais je ne parviens pas à le faire. La table a (pour l'instant) les colonnes suivantes: ifc_key, ifc_name, ifc_parent. ifc_key n'est pas utilisé. (clé primaire, mais non utilisée pour cette fonctionFonction récursive PHP pour extraire des données hiérarchiques de la table plate (Zend Framework)
Le but est d'obtenir un tableau Chaque élément est une interface "parente" (donc tous ces éléments racine sont des valeurs ifc_name qui n'ont pas d'ensemble ifc_parent (ifc_name est égal si elle est définie)
Envisagez la mise en page suivante (démonstration):.
ifc_key | ifc_name | ifc_parent
0 | parent_ifc |
1 | A0A | parent_ifc
2 | a0b | parent_ifc
3 | b0a | vif1
4 | b0b | vif1
5 | vif1 | A0A
donc le tableau que je cherche, généré à partir d'une requête est:
Array
(
[parent_ifc] => Array
(
[a0a] => Array
(
[vif1] => Array
(
[0] => b0a
[1] => b0b
)
)
[a0b] =>
)
)
La fonction que je suis venu avec est sous ce paragraphe. Je voulais créer une fonction récursive, qui consiste à trouver des enfants, mais le problème est qu'aucun des enfants n'est sélectionné lors du premier appel à cette méthode. (ceux avec un parent vide sont les parents eux-mêmes). Donc, je récupère seulement les parents, mais aucun des enfants (et peut-être leurs enfants, etc. - cela peut en théorie être indéfini).
public static function getByFilerOrganisedChildren($filer_id, $parent = '')
{
$table = new Filer_Interface_Table();
$where[] = $table->getAdapter()->quoteInto('ifc_system_id = ?', $filer_id);
$where[] = $table->getAdapter()->quoteInto('ifc_parent = ?', $parent);
$rows = $table->fetchAll($where, 'ifc_parent ASC');
foreach ($rows as $row) {
if ($row->ifc_parent == '') $data[] = $row->ifc_name;
else {
$data[$row->ifc_parent][] = $row->ifc_name;
self::getByFilerOrganisedChildren($filer_id, $row->ifc_parent);
}
}
return (isset($data) ? $data : false);
}
$ interfaces = Filer_Interface :: getByFilerOrganisedChildren (filer- $> system_id); – Tom