Rekursion && nested Array

campari

Erfahrenes Mitglied
Moin,

erhalte aus Drupal eine Menüstruktur als verschachteltes Array.
Es soll ein Submenü zurückgegeben werden, also die Kinder eines bestimmten Eltern Menüpunktes, z.b. das Array 'children' des Menüpunktes 510

Array:
Code:
Array (
    [Home] => Array (
            [link] => Array (
                    [id] => 440
             )
            [children] => Array (
                    [News] => Array (
                            [link] => Array (
                                    [id] => 507
                           )
                           [children] => Array  (
                            )
                    [Submissions] => Array (
                           [link] => Array (
                                    [id] => 510
                           )
                           [children] => Array  (
                                    [Sub 01-23-13] => Array  (
                                            [link] => Array (
                                                    [id] => 566
                                            )
                                            [children] => Array (
                                            )
                                    )
                            )
                    )
            )
    )
    [Map] => Array  (
             [link] => Array (
                     [id] => 509
             )
             [children] => Array (
             )
       )
)

Rekursive Funktion:

PHP:
function get_parent_child($aMenu,$iParent) {
    
    foreach($aMenu as $aItem) {
        
        if($aItem['link']['id'] == $iParent)
            return $aItem['children'];
            
        elseif(isset($aItem['children']) && is_array($aItem['children']) && !empty($aItem['children']))
            get_parent_child($aItem['children'],$iParent);
            
    }
    return false;
}

Aufruf:

PHP:
$aChildren = get_parent_child($aMenu,510);

Es sollen die gesamten Kinder zurückgegeben werden ob empty oder nicht, also in dem Fall
Code:
 [children] => Array  (
         [Sub 01-23-13] => Array  (
                  [link] => Array (
                            [id] => 566
                   )
                   [children] => Array (
                   )
         )
)

Aber die rekursive Funktion ist fehlerhaft, teilweise wird FALSE zurückgegeben, teilweise die gewünschten children.
Sehe den Fehler nicht.
Danke!
 
Du solltest das Resultat von get_parent_child($aItem['children'],$iParent); innerhalb der Funktion weiter nach oben zurückgeben. Dir läuft das Resultat momentan ins leere

PHP:
function get_parent_child($aMenu,$iParent) {
    
    foreach($aMenu as $aItem) {
        
        if($aItem['link']['id'] == $iParent)
            return $aItem['children'];
            
        elseif(isset($aItem['children']) && is_array($aItem['children']) && !empty($aItem['children']))
            //Rückgabewert entgegen nehmen
            $retVal = get_parent_child($aItem['children'],$iParent);
            //und bei einem Treffer die Schleife abbrechen und das Resultat weiterreichen.
            if($retVal !== false) return $retVal;            
    }
    return false;
}
 
Zurück