Ver Mensaje Individual
  #28 (permalink)  
Antiguo 08/09/2014, 17:45
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 10 meses
Puntos: 2534
Respuesta: Arrays sin guión al principio

La estrategia que había sugerido desde un inicio debería bastar, sin embargo no era código copy+paste para que lo usaras sin restricción.

A) La idea era exponer el concepto de usar arrays para ir acumulando los valores, internamente ir concatenando dichos arrays y de manera externa hacerles join() para unirlos.

B) Ahora, también se puede hacer con una variable auxiliar (a modo de emular el comportamiento de la variable estática) pero ello también podría acarrear otros problemas.

¿Y si en lugar de imprimir la cadena deseo almacenarla?

¿Y si quiero cambiar el separador?

La solución (A) sería la correcta entonces, mientras la solución (B) es siempre más frágil (aunque posible).

A)
Código PHP:
Ver original
  1. function get_path($id) {
  2.   // $result y $row ...
  3.  
  4.   if ($row['parent_id'] != NULL) {
  5.     // existe un parent_id, inicializamos el acumulador
  6.     $salida = get_path($row['parent_id'], $separador, true);
  7.   } else {
  8.     // inicializamos el acumulador vacio
  9.     $salida = array();
  10.   }
  11.  
  12.   // agregamos el valor al acumulador
  13.   $salida []= $row['name'];
  14.  
  15.   // devolvemos el acumulador
  16.   return $salida;
  17. }
  18.  
  19. echo join('>', get_path(1));

B)
Código PHP:
Ver original
  1. function get_path($id, $separador = '>', $mostrar_separador = false) {
  2.   // $result y $row ...
  3.  
  4.   if ($row['parent_id'] != NULL) {
  5.     // existe un parent_id, mostramos separador
  6.     get_path($row['parent_id'], $separador, true);
  7.   }
  8.  
  9.   echo $row['name'];
  10.  
  11.   if ($mostrar_separador) {
  12.     echo $separador;
  13.   }
  14. }
  15.  
  16. echo get_path(1);

A propósito de lo siguiente:
Cita:
array(2) {
[0]=> array(2) {
[0]=> array(0) { }
[1]=> string(6) "Inicio"
}
[1]=> string(15) "Portasahumerios" }
Eso se debe a que se agrega el resultado de get_path() y es un array, por eso se está generando un array de arrays independientemente de si hay o no un valor.

Lo correcto sería "aplanar" el array, o en el caso de la estrategia (A) reemplazar el array por el acumulador que resuelve el parent_id.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.