Ver Mensaje Individual
  #19 (permalink)  
Antiguo 12/02/2013, 15:02
Onedy
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Funciones recursivas no devuelven 'nada'

Tienes razón, esta parece ser la causa. Entonces, entiendo que si antes de usar $this, pongo global $pag, ya me deja. Lo he probado y ya no da ningún error. Gracias por la ayuda.

Ahora no tiene ningún error, pero tampoco devuelve nada :D He hecho dos correcciones las funciones, y ahora que están todavía mejor, siguen sin funcionar.
Código PHP:
/**
 * Funcion que uso para pasar el arbol y asi simplificar al maximo el codigo en el tema
 * @return string La lista definitiva
 */
function imprimir_categorias(){
    global 
$pag;
    return 
recorrerCategoriasPadre($pag->crearArbolCategorias());
}

/**
 * Funcion que recibe un arbol, recorre cada una de las categorias padre y se las
 * da a recorrerCategoriasHijas para que las imprima y recorra sus hijos.
 * @param array Un arbol de categorias
 * @return string El listado de todas las categorias
 */

function recorrerCategoriasPadre($arbol){
    
$html="
        <ul>"
;//empezamos la lista
    
foreach($arbol as $padre){ //por cada padre que haya
            
$html.=recorrerCategoriasHijas($padre); //empezamos a recorrer
    
}
    
$html.="
        <ul>"
;//cerramos la lista
    
return $html//retornamos la lista completa
}

/**
 * Funcion que recorre cada categoria y sus hijos
 * @param array $arbol Un arbol de categorias
 * @return string Lista con cada categoria y sus hijos
 */
function recorrerCategoriasHijas($arbol){
    
//imprimimos la categoria padre en cuestion
    
$html="<li>
                <input type=\"checkbox\" name=\"cb{$arbol[0]['id']}\" id=\"cb{$arbol[0]['id']}\" />
                <label for=\"cb{$arbol[0]['id']}\">{$arbol[0]['nombre']}</label>"
;
    if(isset(
$arbol[1])){//y si tiene hijos
        
for($i=1;$i<count($arbol);$i++){//los recorremos tambien, imprimiendolos
            
$html.="
                <ul>"
;//abrimos una lista anidada
            
$html.=recorrerCategoriasHijas($arbol[$i]);
            
$html.="
                <ul>"
;//la cerramos
        
}
    }
    
$html.="
        </li>"
;//cerramos la categoria padre
    
return $html//retornamos la seccion

Las categorías que lee están en el código del primer mensaje, en el 5º párrafo. El array es iterable, salió exactamente como quería. Además lo acabo de volver a comprobar.
El problema es que no devuelven nada estas 3 funciones.

¿Alguna idea de por qué?
He probado a poner un var_dump del array de categorías que recorre, y si que se imprimen.

Gracias de antemano