Foros del Web » Programando para Internet » PHP »

Problema de logica con for y <ul>

Estas en el tema de Problema de logica con for y <ul> en el foro de PHP en Foros del Web. Hola a todos, tengo un problemas mas de logica que tecnico con un ciclo que necesito construir con PHP y no logro construirlo. Tengo una ...
  #1 (permalink)  
Antiguo 12/01/2010, 13:40
 
Fecha de Ingreso: junio-2009
Mensajes: 79
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Problema de logica con for y <ul>

Hola a todos, tengo un problemas mas de logica que tecnico con un ciclo que necesito construir con PHP y no logro construirlo.

Tengo una table que me guarda la descripcion de cierto numero de categorias, por ejemplo:

ID | Descripcion | ID_Rel
1 Ropa null
2 Camisa 1
3 Pantalon 1
4 Zapatos 1
5 Deportivos 4
6 Electronicos null

ID_Rel seria el ID de la categoria anterior a la cual pertenece ese registro, de tal manera que en este ejemplo seria:

1. Ropa
1.1 Camisa
1.2 Pantalon
1.3 Zapatos
1.3.1 Deportivos
2. Electronicos

Necesito construir un for con php de tal manera que coloque cada categoria principal dentro de un <ul> y cada subcategoria dentro del <ul> que le corresponda, siguiendo con el ejemplo anterior deberia quedar de la siguiente manera:

Código HTML:
Ver original
  1. <ul>
  2.  <li>Ropa
  3.    <ul>
  4.       <li>Camisa</li>
  5.       <li>Pantalon</li>
  6.       <li>Zapatos
  7.          <ul>
  8.             <li>Deportivos</li>
  9.          </ul>
  10.       </li>
  11.     </ul>
  12.    </li>
  13.    <li>Electronicos</li>
  14. </ul>

No se ni por donde empezar? Deberia cambiar la forma en la que organizo las categorias en la BD? No puedo crear una tabla para cada categoria porque la idea es que el usuario pueda agregar x numero de categorias y sub-categorias y creo que con 1 sola tabla se podria hacer, aunque no se si lo estoy haciendo bien.

Por favor si pudieran apuntarme en la direccion correcta les agradeceria mucho! Gracias de antemano.
  #2 (permalink)  
Antiguo 12/01/2010, 13:48
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Problema de logica con for y <ul>

Recursión, si la tabla la diseñaste para que cada categorías tenga n-subcategorías y éstas a su vez de igual forma.

ejemplo:http://www.forosdelweb.com/f18/menu-...2/#post3191112
  #3 (permalink)  
Antiguo 12/01/2010, 14:10
 
Fecha de Ingreso: junio-2009
Mensajes: 79
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema de logica con for y <ul>

Gracias por la idea, pareciera como si la respuesta seria utilizar foreach de alguna manera.. Voy a investigar un poco mas, si alguien me pudiera dar algun otro consejo le agradeceria igualmente.

En primer lugar lo unico que tengo es:

Código PHP:
Ver original
  1. <?php
  2. $arrCategorias = tiendas->select_categorias(); // Funcion que traetodo el contenido de la tabla categorias
  3.  
  4. ?>
  5.  
  6. <ul>
  7. <? for ($i=0; $i<sizeof($arrCategorias); $i++) { ?>
  8. <li><?=$arrCategorias[$i]['descripcion_categoria']?></li>
  9. <? } ?>
  10. </ul>

Pero eso me monta todo el contenido de la tabla dentro de un solo bloque de <ul> sin importar las sub-categorias...

Última edición por bengiss; 12/01/2010 a las 14:15
  #4 (permalink)  
Antiguo 12/01/2010, 14:37
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Problema de logica con for y <ul>

la única forma como te dije es la recursión, preferiblemente una función que se llama a si misma devolviendo el html concatenado, dentro de ella lees el primer nivel (que son las categorias sin padre) y las recorres en un ciclo, a cada una vueves a llamar a la misma función pero con el id que seria el padre de la función en la próxima pila, y así; llegará un momento en que ninguna subcategoria tenga hijos y la pila retrocede hasta terminar.

busca en google "factorial recursivo" y verás de que se trata

Etiquetas: logica
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.