2010-08-14 6 views
5

Après deux heures de tête gratter et googler - je suis coincé!PHP - Erreur lors du retour d'un tableau à partir d'une fonction récursive

En ce qui concerne le titre, j'essaie de renvoyer un tableau construit en fonction de la boucle de la fonction. Je veux seulement renvoyer la variable de tableau sur l'autre mais il ne coopérera pas. Il retourne simplement comme vide de la fonction, mais dans l'autre je peux l'imprimer et montrer comme prévu. Il ne retournera tout simplement pas le tableau dans la variable $ open_array. Toute idée (ou abus) serait grandement appréciée!

function find_parent($number, $open = false) { 
    if(isset($other_variable[$number])) { 
     foreach($other_variable[$number] as $val) { 
      $open[$val->id] = [$val->id; 
      $open = find_parent([$val->id, $open); 

     } 
    } 
    else { 
    return $open; 
    } 
} 

$open_array = find_parent($number); 
print_r($open_array); 
+0

Je ne vois pas 'other_variable' $ étant défini dans le périmètre de la fonction. – NullUserException

+0

Aussi le '[$ val-> id' il n'y a pas de syntaxe valide. Est-ce que cela fonctionne même? – NullUserException

+0

Quoi? Vous n'utilisez pas la récursivité pour créer des tableaux? De quelle planète viens-tu, moronia? –

Répondre

3

Dans la partie "then", vous assignez à ouvrir $, mais ne reviennent jamais cette valeur. Vous ne pouvez donc pas vraiment espérer récupérer quelque chose, sauf dans les cas où vous entrez dans la partie else, mais c'est une version inchangée.

Alors voici ce que je ferais: j'irais avec une version sans retourner $ ouvert jamais. Initialisez $ open avant d'appeler la fonction. Passez le mot. Ensuite, modifiez-le si nécessaire.

Il n'y a pas vraiment de raison de retourner cette valeur $ ouverte puisque vous la transmettez par référence de toute façon, c'est-à-dire qu'elle devrait toujours être le même objet que vous manipulez (et dans le cas contraire probablement un bug). De cette façon, vous pouvez vous concentrer sur la logique de flux avec vos appels et retours, et assurez-vous de toujours parler à la même infrastructure de données.

mise à jour

function find_parent($number, $open = false) { 
    if(isset($other_variable[$number])) { 
     foreach($other_variable[$number] as $val) { 
      $open[$val->id] = [$val->id; 
      $open = find_parent([$val->id, $open); 
      return $open; // INSERTED 
     } 
    } 
    else { 
    return $open; 
    } 
} 
+0

Je comprends votre commentaire merci :). Mais cela n'a toujours pas de sens pour moi que je puisse print_r ($ open) à l'intérieur de l'autre il imprime le tableau comme je l'espère mais je ne peux pas le retourner? – Hayden

+0

essayez de le retourner dans la partie "alors" (voir mise à jour). sinon, la valeur est définie dans la partie "then", correctement transmise à l'appel récursif, donc elle est également présente dans la partie "else", mais une fois que la partie "if" de l'appel précédent est retournée, elle n'est pas retournée. – Nicolas78

+0

Bingo qui a travaillé un régal. Je vous remercie! – Hayden

Questions connexes