2009-11-25 13 views
0

J'écris une fonction récursive pour construire un tableau multidimensionnel. Fondamentalement, le problème est le suivant:Création d'une instance d'une paire clé-valeur php sans tableau

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

Pensées? Je sais que je pourrais réécrire la structure de la fonction pour la faire fonctionner, mais il semble que cela ne soit pas nécessaire.

Répondre

0

Un tableau est le seul conteneur de paires valeur/clé 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 clé-valeur.

return array($term->text() => $children); 
2
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, voici à quoi cela devrait ressembler. Ajout de la récursivité et du retour d'un tableau.

Edit: en aparté, il vaut peut-être mieux retourner un tableau, même si count ($ children) == 0, tous vos types seront intégrés. sinon vous pouvez obtenir toutes sortes d'erreurs sur la ligne:

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

Malheureusement, je ne veux pas que mes types de données soient en ligne. C'est pour l'entrée de ul() de CodeIgniter ... voir http://codeigniter.com/user_guide/helpers/html_helper.html#ol_and_ul – user199085

0

Vous pouvez le retourner comme ceci:

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

Bien que ce n'est 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.