Foros del Web » Programando para Internet » PHP »

Problema para dividir lista en 3 columnas

Estas en el tema de Problema para dividir lista en 3 columnas en el foro de PHP en Foros del Web. Tengo un problema de logica Tengo un resultado q obtendo de una consulta sql, el problema es que quiero dividir toda esta lista en tres ...
  #1 (permalink)  
Antiguo 02/09/2010, 13:22
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Problema para dividir lista en 3 columnas

Tengo un problema de logica
Tengo un resultado q obtendo de una consulta sql, el problema es que quiero dividir toda esta lista en tres columnas
cosea:
<div style="float:left"></div>
<div style="float:left"></div>
<div style="float:left"></div>

por ejemplo:
--Si tengo en mi lista, 12 items
entonces en cada columna(en cada <div>) entraran 4 items
--Si tengo en mi lista 10 items, entonces en la primera y segunda columna entraran 4 items en cada una y en la tercera entraran los 2 restantes

Como hago esta logica en PHP?
actualmente estoy mostrando mi lista asi:
Código PHP:
foreach($lista as $item
{
echo 
$item."<br/>";

__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #2 (permalink)  
Antiguo 02/09/2010, 13:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema para dividir lista en 3 columnas

primero deberías seccionar el array completo en partes, puedes usar array_slice()

una ves tengas sub-agrupados los arreglos procedes a iterarlos...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/09/2010, 13:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Respuesta: Problema para dividir lista en 3 columnas

Yo le dejo ese trabajo a CCS.

Código PHP:

<div id="contenedor" style="width:600px;">
<?php
   
foreach($lista as $item)
   { 
?>
    <div style="float:left;width:200px;height:100px;"><?php echo $item;?></div>
<?php
   
}
?>

</div>

?>
El div contenedor tiene 600px de ancho, y los div interiores 200px de ancho, por tanto caben 3, si lo amplias a 800px caben 4, etc.
  #4 (permalink)  
Antiguo 02/09/2010, 13:35
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

mmm, no es eso lo q estaba buscando, el problema tiene q ver con la logica
Osea el problema es sencillo(pero no puedo contrar una solucion) es dividir las lista total en 3 columnas,,un ejemplo:
Si la lista tiene 17 items
entonces en la 1º y 2º columna entraran 8 Items y en la tercera entrara solo 1 Item
Si la lista tiene 54 items
entonces en la 1º y 2º columna entraran 26 Items y en la tercera entrara solo 2 Items
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #5 (permalink)  
Antiguo 02/09/2010, 13:57
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Problema para dividir lista en 3 columnas

Cita:
Iniciado por claudiovega Ver Mensaje
Yo le dejo ese trabajo a CCS.

Código PHP:

<div id="contenedor" style="width:600px;">
<?php
   
foreach($lista as $item)
   { 
?>
    <div style="float:left;width:200px;height:100px;"><?php echo $item;?></div>
<?php
   
}
?>

</div>

?>
El div contenedor tiene 600px de ancho, y los div interiores 200px de ancho, por tanto caben 3, si lo amplias a 800px caben 4, etc.
Muy ingenioso!

Con array_slice podes extraer partes. Pero no se bien como calcular el inicio y fin de las partes.

La primera es fácil:

Código PHP:
$listaUno array_slice($lista,  count($lista)/); 
Luego? Quizás:

Código PHP:
$cantidad round count($lista)/);

$listaUno array_slice($lista$cantidad );

$listaDos array_slice($cantidad,  count($lista) - $cantidad);

$listaTres array_slice(count($lista) - $cantidad); 
Pero no garantizo que pierdas un elemento o se duplique ;o)
  #6 (permalink)  
Antiguo 02/09/2010, 16:30
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

Cita:
Con array_slice podes extraer partes. Pero no se bien como calcular el inicio y fin de las partes.
ese es el gran problema
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #7 (permalink)  
Antiguo 02/09/2010, 16:40
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema para dividir lista en 3 columnas

Pues el último elemento de un arreglo, siempre será :

Código PHP:
count($arreglo)-
También se puede usar end()...

Bueno pues... el primer elemento.... siempre es :

Código PHP:
echo $arreglo[0]; 
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #8 (permalink)  
Antiguo 02/09/2010, 16:44
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

mira no se si es lo que buscas

dbes verificar que la cantidad de items...sea multiplo de 3 si es multiplo de 3....

pues columna1 =cantidad/3, columna2 =cantidad/3, columna3 =cantidad/3,

si no lo es....entonces

pues columna1 =intval(cantidad/2), columna2 =intval(cantidad/2), columna3 =cantidad%2
  #9 (permalink)  
Antiguo 02/09/2010, 16:45
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema para dividir lista en 3 columnas

Perdón, quería editar un mensaje anterior y en vez de editarlo lo cité :P
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #10 (permalink)  
Antiguo 02/09/2010, 16:51
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

muchas gracias pro las sugerencias, pero hasta ahora de todas las q probe no funciono ninguna
naciostars
en el caso de q sean 10 items
entonces con tu logica,
5 al primero, 5 al segundo y quedaria 0 para la tercera columna, estaba casi,pero no funciono
ahh y otra cosa
puede q la cantidad de items sea < a 3 ,por ejemplo 2
en ese caso solo se necesita mostrarlo en 1 columna

Este problema parece sencillo pero no logra encontrar la solucion :P
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #11 (permalink)  
Antiguo 02/09/2010, 18:52
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

en caso de que sea 10 como debe quedar distribuido
  #12 (permalink)  
Antiguo 03/09/2010, 13:13
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

en ese caso seria 4 al primero, 4 al segundo y solo 2 a la tercera columna
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #13 (permalink)  
Antiguo 03/09/2010, 18:32
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

entonces 17 lo ideal es que fuera 6 6 y 5
  #14 (permalink)  
Antiguo 03/09/2010, 18:59
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

entonces la solucion que te planteo es esta jajajjaa

la solución que te planteo es la siguiente

if($cantidad==1)
{
columna1=1;
columna2=0;
columna3=0;
}
else
if($cantidad==1)
{
columna1=1;
columna2=0;
columna3=0;
}
else
if($cantidad>=3)
{
if($cantidad%3==0)
{
columna1=($cantidad/3);
columna2=($cantidad/3);
columna3=($cantidad/3);
}
else
{
columna1=(($cantidad+3-($cantida%3))/3);
columna2=(($cantidad+3-($cantida%3))/3);
columna3=($cantidad-((($cantidad+3-($cantida%3))/3)*2));
}
}
  #15 (permalink)  
Antiguo 03/09/2010, 19:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema para dividir lista en 3 columnas

No entiendo porque esa distrubucion tan rara en las 3 columnas.

12 = 4 + 4 + 4... OK
10 = 4 + 4 + 2... OK (mas o menos... yo lo haria 4 + 3 + 3)
17 = 8 + 8 + 1... PORQUE????
17 = 6 + 6 + 5... OK como dice naciostars

Si las distribuyes de manera uniforme basta con calcular el total disponible para cada columna con ceil(count($items)/3);
__________________
- León, Guanajuato
- GV-Foto
  #16 (permalink)  
Antiguo 03/09/2010, 19:07
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

lo siento en el segundo if hice lo mismo que en el primero que pena aca lo corrijo

la solución que te planteo es la siguiente

if($cantidad==1)
{
columna1=1;
columna2=0;
columna3=0;
}
else
if($cantidad==2)
{
columna1=1;
columna2=1;
columna3=0;
}
else
if($cantidad>=3)
{
if($cantidad%3==0)
{
columna1=($cantidad/3);
columna2=($cantidad/3);
columna3=($cantidad/3);
}
else
{
columna1=(($cantidad+3-($cantida%3))/3);
columna2=(($cantidad+3-($cantida%3))/3);
columna3=($cantidad-((($cantidad+3-($cantida%3))/3)*2));
}
}
  #17 (permalink)  
Antiguo 05/09/2010, 15:53
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

Triby ,osea la idea es de poner la mayor cantidad posible en las 2 primeras columnas, pero de manera igual y la tercera columna solo seria para el restante,osea lo q sobra
Y si el numero fuera multiplo de 3 , osea quedaria 3 en cada columna
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #18 (permalink)  
Antiguo 06/09/2010, 07:49
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

gracias naciostars ,pero no me ayuda por completo,se supone q tiene q haber un bucle,no? para hacer todo el recorrido de la lista
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #19 (permalink)  
Antiguo 06/09/2010, 09:33
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

Mmmm....yo te paso la logica de la distribucion....necesitas tambien el bucle?
  #20 (permalink)  
Antiguo 06/09/2010, 09:50
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

si te das cuenta esa logica de distribucion no funcionaria con un bucle
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #21 (permalink)  
Antiguo 06/09/2010, 10:28
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

<?php
$alfredo=array('Alfredo','Lina','Karen','Andres',' Rodrigo');
$cantidad=count($alfredo);
if($cantidad==1)
{
$columna1=1;
$columna2=0;
$columna3=0;
}
else
if($cantidad==2)
{
$columna1=1;
$columna2=1;
$columna3=0;
}
else
if($cantidad>=3)
{
if($cantidad%3==0)
{
$columna1=($cantidad/3);
$columna2=($cantidad/3);
$columna3=($cantidad/3);
}
else
{
$columna1=intval((($cantidad+3-($cantida%3))/3));
$columna2=intval((($cantidad+3-($cantida%3))/3));
$columna3=($cantidad-((intval(($cantidad+3-($cantida%3))/3))*2));
}
}

echo $columna1;
echo "<br>";
echo $columna2;
echo "<br>";
echo $columna3;
echo "<br>";
?>
<table align="center" border="1">
<tr><td>
<?
for($c=1;$c<=count($alfredo);$c++)
{
//echo $alfredo[$c];
if($c<=$columna1)
{
echo $alfredo[$c-1];
echo "<br/>";
}
else
if($c<=($columna1+$columna2))
{
if($c==($columna1+1))
{
echo "</td><td>";
}
echo $alfredo[$c-1];
echo "<br/>";
}
else
if($c<=($columna1+$columna2+$columna3))
{
if($c==($columna1+$columna2+1))
{
echo "</td><td>";
}
echo $alfredo[$c-1];
echo "<br/>";
}

}

?>
</td></tr>
</table>



lo hice en un momento....obvio se puede optimizar....lo siento es que ando en el trabajo

pero si lo puedo hacer en un bucle...=)
  #22 (permalink)  
Antiguo 06/09/2010, 10:32
 
Fecha de Ingreso: enero-2009
Ubicación: Neiva, Huila
Mensajes: 196
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

de donde sacas que no se puede usar en un bucle....yo siempre he pensado que todo es cuestión de lógica.
  #23 (permalink)  
Antiguo 06/09/2010, 10:47
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Problema para dividir lista en 3 columnas

muchas gracias, si me funciono como queria, muchas gracias de verdad
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"

Etiquetas: columnas, dividir, lista
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 19:01.