2010-08-14 21 views
5

Después de dos horas de rascarse la cabeza y buscar en Google - ¡Estoy atascado!PHP - Error al devolver una matriz desde una función recursiva

Según el título estoy tratando de devolver una matriz que se crea a medida que la función pasa. Solo quiero devolver la variable de matriz en el else, pero no cooperará. Simplemente vuelve como un espacio en blanco lejos de la función, sin embargo, dentro de lo demás, puedo imprimirlo y mostrarlo como se esperaba. Simplemente no devolverá la matriz en la variable $ open_array. ¡Cualquier idea (o abuso) sería muy apreciada!

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

no veo '$ other_variable' estando definido el alcance de la función. – NullUserException

+0

También el '[$ val-> id' no es una sintaxis válida. Esto incluso se ejecuta? – NullUserException

+0

¿Qué? Usted no usa la recursividad para construir matrices? ¿De qué planeta eres, moronia? –

Respuesta

3

En la parte "then", asigne a $ open, pero nunca devuelva ese valor. Entonces, realmente no se puede esperar recuperar algo, excepto en los casos en que se ingresa en la parte else, pero luego es una versión sin cambios.

Así que esto es lo que haría: iría con una versión sin devolver $ abierto alguna vez. Inicialice $ abrir antes de llamar a la función. Pásalo. Luego modifíquelo donde sea necesario.

No hay ninguna razón para devolver este $ open value dado que lo está pasando por referencia de todos modos, es decir, siempre debe ser el mismo objeto que está manipulando (y en esos casos que no lo es, es probablemente un error).

De esta manera, puede concentrarse en la lógica de flujo con sus llamadas y devoluciones, y asegúrese de hablar siempre con la misma estructura de datos.

actualización

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

Entiendo su comentario gracias :). Pero todavía no tiene sentido para mí que pueda print_r ($ abrir) dentro de lo demás, imprime la matriz como lo espero, pero no puedo devolverla. – Hayden

+0

intente devolverlo en la parte "entonces" también (ver actualización). de lo contrario, el valor se establece en la parte "then", transferida correctamente a la llamada recursiva, por lo que también está presente en la parte "else", pero una vez que se devuelve la parte "if" de la llamada anterior, no se devuelve. – Nicolas78

+0

Bingo que funcionó bien. ¡Gracias! – Hayden

Cuestiones relacionadas