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

Hola,

Antes de nada deciros que aprecio muchísimo el trabajo que se hace en este foro, se encuentran respuestas a todo.

Esta vez estoy tratando de hacer unas funciones para recorrer una especie de árbol de categorías, aunque en realidad es un array con "truco", digamos

PERO el problema es que no devuelven NADA.

El truco para usar un array en vez de crear otra clase "Arbol", es crear un array para cada categoría encontrada, ponerla en el elemento [0], y en los sucesivos índices poner sus hijas, cada una en su correspondiente array, claro está.

El esquema es el siguiente:
Código:
array (size=2)                       //Hay 2 categorías padre
  0 => 
    array (size=3)                   //tamaño 3 porque la categoría A tiene 2 hijos (ella y sus hijos)
      0 => 
        array (size=3)               //lo que es la categoría - tiene nombre id e id_padre
          'nombre' => string 'A' (length=1)
          'id' => string '1' (length=1)
          'id_padre' => string '0' (length=1)
      1 => 
        array (size=3)               //primera hija
          0 => 
            array (size=3)           //su contenido
              ...
          1 => 
            array (size=1)           //su hija
              ...
          2 => 
            array (size=1)           //otra hija suya
              ...
  1 => 
    array (size=4)                   //la 2ª categoría padre
      0 => 
        array (size=3)               //su contenido
          'nombre' => string 'B' (length=1)
          'id' => string '2' (length=1)
          'id_padre' => string '0' (length=1)
      1 => 
        array (size=1)               //su primera hija
          0 => 
            array (size=3)           //su contenido
              ...
      2 => 
        array (size=1)               //su segunda hija
          0 => 
            array (size=3)           //su contenido
              ...
      3 => 
        array (size=1)               //su tercera hija
          0 => 
            array (size=3)           //su contenido
              ...
//FIN
Las funciones son las siguientes:
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(){
    return 
recorrerCategoriasPadre($this->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($arbol[$i]); //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 &recorrerCateogiasHijas(&$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

Alguna idea de por qué no devuelven nada?

Muchísimas gracias de antemano