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 originalfunction get_path($id) {
// $result y $row ...
if ($row['parent_id'] != NULL) {
// existe un parent_id, inicializamos el acumulador
$salida = get_path($row['parent_id'], $separador, true);
} else {
// inicializamos el acumulador vacio
}
// agregamos el valor al acumulador
$salida []= $row['name'];
// devolvemos el acumulador
return $salida;
}
echo join('>', get_path
(1));
B)
Código PHP:
Ver originalfunction get_path($id, $separador = '>', $mostrar_separador = false) {
// $result y $row ...
if ($row['parent_id'] != NULL) {
// existe un parent_id, mostramos separador
get_path($row['parent_id'], $separador, true);
}
echo $row['name'];
if ($mostrar_separador) {
echo $separador;
}
}
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.