Ver Mensaje Individual
  #19 (permalink)  
Antiguo 12/02/2013, 15:02
Onedy
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 15 años, 2 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