Question

J'écris une fonction récursive pour construire un tableau multidimensionnel. Fondamentalement, le problème est le suivant:

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           
    }
}

Les pensées? Je sais que je pourrais réécrire la structure de la fonction pour le faire fonctionner, mais il semble que cela devrait être inutile.

Était-ce utile?

La solution

Un tableau est le seul conteneur de paire de valeurs clés que PHP a à offrir. Vous devez donc utiliser un tableau si vous voulez que votre fonction (qu'elle soit récursive ou non) renvoie une paire de valeurs clés.

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

Autres conseils

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               
    }
}

D'après ce que je comprends de la question, c'est à quoi il devrait ressembler.

Ajoutant la récursivité et renvoyant un tableau.

EDIT: Soit dit en passant, vous pourriez être mieux renvoyé d'un tableau même si Count ($ enfants) == 0, cela ferait tous vos types en ligne. Sinon, vous pouvez obtenir toutes sortes d'erreurs sur la ligne:

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

Vous pourriez le retourner comme ceci:

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

Bien que ce ne soit pas ce que vous avez demandé. Je pense que vous ne pouvez pas le faire sans réécrire des parties de votre fonction, d'une manière ou d'une autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top