Frage

Ich schreibe eine rekursive Funktion, um ein mehrdimensionales Array zu konstruieren. Grundsätzlich ist das Problem wie folgt:

function build($term){      
    $children = array();

    foreach ( $term->children() as $child ) {
        $children[] = build($child);
    }

    if(!count($children)){
        return $term->text();
    } else {
        return $term->text() => $children; //obviously, this doesn't work           
    }
}

Gedanken? Ich weiß, dass ich die Struktur der Funktion umschreiben könnte, damit sie funktioniert, aber es scheint, als ob das unnötig sein sollte.

War es hilfreich?

Lösung

Ein Array ist das einzige Schlüsselwertpaar-Container-Container, der PHP bietet. Sie müssen also ein Array verwenden, wenn Sie Ihre Funktion möchten (möglicherweise rekursiv oder nicht), um ein Schlüsselwertpaar zurückzugeben.

return array($term->text() => $children);

Andere Tipps

function build($term){          
    $children = array();

    foreach ( $term->children() as $child ) {
        $children += build($child);
    }

    if(!count($children)){
        return $term->text();
    } else {
        return array($term->text() => $children); //obviously, this doesn't work               
    }
}

Soweit ich die Frage verstehe, sollte es so aussehen.

Anhängen der Rekursion und Rückgabe eines Arrays.

Bearbeiten: Abgesehen davon sind Sie möglicherweise besser dran, ein Array zurückzugeben, selbst wenn Count ($ children) == 0, dies würde alle Ihre Typen inline erhalten. Andernfalls können Sie alle möglichen Fehler auf der ganzen Linie erhalten:

if(!count($children)){
            return array($term->text() => null);

Sie könnten es so zurückgeben:

return array($term->text() => $children);

Obwohl es nicht das ist, was Sie gefragt haben. Ich denke, Sie können dies nicht tun, ohne Teile Ihrer Funktion auf die eine oder andere Weise neu zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top