Foros del Web » Programando para Internet » PHP »

Separar en bucle por elementos

Estas en el tema de Separar en bucle por elementos en el foro de PHP en Foros del Web. Hola a todos quisiera saber si hay alguna función para contar en un bucle los elementos en grupos , de 3 en 3 , de ...
  #1 (permalink)  
Antiguo 19/09/2012, 00:32
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 4 meses
Puntos: 20
Exclamación Separar en bucle por elementos

Hola a todos quisiera saber si hay alguna función para contar en un bucle los elementos en grupos , de 3 en 3 , de 2 en dos , etc

Pero algo que no sea diferenciar de par e impar puesto qeu no me funciona , al hacer una paginación me sale mal la cosa , ya hhe tratado eso en otro post pero no es lo qeu busco

El tema de diferenciar par e impar me provoca errores , puesto que al paginar a veces queda el impar al principio vuando debería de quedar después quedando los elementos mostrados muy mal

Por ello tendría que ser algo que al contar en un bucle for corte como un sumatorio de elementos digamos que al detectar que es la cantidad máxima lo detecte

Cita:

for ($i=0;$i<7;$i++)
{

/// cuente cada 3


}


Se deberia mostrar :

012
345
67


Actualmente tengo problemas y se me muestran asi en uos casos y en otros bien :

0
123
456
7






Saludos muchas gracias a todos
  #2 (permalink)  
Antiguo 19/09/2012, 00:41
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Separar en bucle por elementos

http://www.forosdelweb.com/f18/probl...impar-1013793/
  #3 (permalink)  
Antiguo 19/09/2012, 00:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 4 meses
Puntos: 20
Exclamación Respuesta: Separar en bucle por elementos

Este es mi script y el problema es utilizar eso lo de par e impar por eso que consideré que era mejor un post independiente :

Código PHP:

<?php
/// Opciones gal,file o dir ///
$p_mode="file";
$p_cols="3";
$p_ruta_images="imagenes/banners";
$p_ruta_file="ejemplo.txt";
$p_ruta_dir="db_p/db_productos";
$p_number_elementos_pag="4";
$p_grupos_paginados="5";
///
?>


<?php
if ($p_mode=="file")
{
$p_file=file("".$p_ruta_file."");
$p_n_elements=0;
for(
$p=0;$p<sizeof($p_file);$p++)
{
$f_files[]=$p_file[$p];
$p_n_elements++;
}
}
?>


<?php
if ($p_mode=="gal" or $p_mode=="dir")
{

if (
$p_mode=="gal")
{
$p_dir="".$p_ruta_images."";
}
else
{
$p_dir=="".$p_ruta_dir."";
}

$p_n_elements=0;

$p_dir=opendir($p_dir);

while(
$file=readdir($p_dir))
{
if (
$file!="." && $file!=".." && $file!=".htaccess" && $file!="index.html" && $file!="Thumbs.db" && $file!="config.dat")
{
$p_n_elements++;
}
}
closedir($p_dir);

}
?>


<?php
$p_number_elements
="".$p_n_elements."";
$p_totales=ceil($p_number_elements/$p_number_elementos_pag);
$pag="".$_REQUEST['pag']."";

?>


<?
$back_total
="<a href=?pag=1>  <<</a>";
$next_total="<a href=?pag=$p_n_elements>  >></a>";
?>

<?php




if ($p_totales<$p_grupos_paginados)
{
$p_grupos_paginados="$p_totales";
}
else
{
$p_grupos_paginados="$p_grupos_paginados";
}



/// Si la página es cero ///
if ($pag==or $pag=="" or $pag<or $pag==1)
{
$p_ini=1;
$p_end="".$p_grupos_paginados."";


$p_ini_e="1";
$p_end_e="".$p_number_elementos_pag."";


$back="";
$next='<a href=?pag='.($pag+1).'>> </a>';

}
///



/// Si páginas superan el total ///
if ($pag>=$p_totales)
{

print 
"mayor";
$p_ini="".($p_totales)-($p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";


$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";


$back='<a href=?pag='.($pag-1).'>< </a>';
$next="";
}
///







if ($pag>&& $pag<$p_totales)
{



//if (($pag)+($p_grupos_paginados)>=$p_totales)
if ($pag>=$p_totales)
{

$p_ini="".($p_totales-$p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";

$back='<a href=?pag='.($pag-1).'>< </a>';
$next='<a href=?pag='.($pag+1).'>> </a>';

$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";


}
else
{







if ((
$pag)+($p_grupos_paginados)>=$p_totales)
{


$p_ini="".($p_totales)-($p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";

}
else
{
$p_ini="".($pag)."";
$p_end="".($p_ini)+($p_grupos_paginados)-(1)."";
}




if ((
$pag)*($p_number_elementos_pag)>$p_n_elements)
{
$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";
}
else
{
$p_end_e="".($pag)*($p_number_elementos_pag)."";
$p_ini_e="".($p_end_e)-($p_number_elementos_pag)+(1)."";
}



$back='<a href=?pag='.($pag-1).'>< </a>';
$next='<a href=?pag='.($pag+1).'>> </a>';







}

}



?>









<?php
print "<table width=50% border=0 cellpadding=0 cellspacing=1 align=center valign=middle>
<tr> 
<td align=center valign=middle colspan=$pages>
</td>
</tr><tr>"
;
?>

<?php

$x
=$p_ini_e-1;


echo 
"<b>$p_ini_e $p_end_e</b>";

for(
$i=$p_ini_e;$i<=$p_end_e;$i++)
{


print 
"<td align=center valign=middle>";


echo 
$f_files[$x];


print 
"</td>";


if ((
$i)%$p_cols==0)
{
print 
"</tr>";
}
else
{

}



$x++;
}

print 
"</table>";
?>































<?php

echo $back_total
echo 
$back

for(
$i=$p_ini;$i<=$p_end;$i++)
{

print 
"<a href=?pag=".$i.">".$i."</a> ";

}

echo 
$next
echo 
$next_total

?>



Para testearlo crear un archivo de texto ejemplo.txt con saltos de linea con cualquier valor nada más

El problema es que los elementos no salen en las columnas indicadas por eso que lo de par impar no me funciona , el script este que he hecho podrá paginar resultados pro salto d elinea en campos de texto como directorios o imágenes

Pero me falla eso

El actual caso que pongo es leyendo un archivo con saltos de linea

Saludos
  #4 (permalink)  
Antiguo 19/09/2012, 03:08
 
Fecha de Ingreso: febrero-2012
Ubicación: En mi propio mundo
Mensajes: 73
Antigüedad: 12 años, 1 mes
Puntos: 23
Respuesta: Separar en bucle por elementos

En teoria tu problema lo tienes en estas líneas ¿no?:

Código PHP:
<?php

$x
=$p_ini_e-1;


echo 
"<b>$p_ini_e $p_end_e</b>";

for(
$i=$p_ini_e;$i<=$p_end_e;$i++)
{


print 
"<td align=center valign=middle>";


echo 
$f_files[$x];


print 
"</td>";


if ((
$i)%$p_cols==0)
{
print 
"</tr>";
}
else
{

}



$x++;
}
print "</table>";
?>

Primer fallo que pasa si $p_ini_e es = 0 ... la $x valdría -1 y por ello $f_files[$x] ya te daría fallo.

Si te fijas en la ultima solucion del tema
http://www.forosdelweb.com/f18/probl...impar-1013793/, y haces los cambios oportunos para adaptarlo a tu codigo, te funcionará bien.

Última edición por Fierox; 19/09/2012 a las 03:09 Razón: resaltar algunas cosas en negrita
  #5 (permalink)  
Antiguo 19/09/2012, 06:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 4 meses
Puntos: 20
Exclamación Respuesta: Separar en bucle por elementos

Código PHP:

<?php
/// Opciones gal,file o dir ///
$p_mode="file";
$p_cols="3";
$p_ruta_images="imagenes/banners";
$p_ruta_file="ejemplo.txt";
$p_ruta_dir="db_p/db_productos";
$p_number_elementos_pag="6";
$p_grupos_paginados="3";
///
?>

<?php
if ($p_mode=="file")
{
$p_file=file("".$p_ruta_file."");
$p_n_elements=0;
for(
$p=0;$p<sizeof($p_file);$p++)
{
$f_files[]=$p_file[$p];
$p_n_elements++;
}
}
?>


<?php
if ($p_mode=="gal" or $p_mode=="dir")
{

if (
$p_mode=="gal")
{
$p_dir="".$p_ruta_images."";
}
else
{
$p_dir=="".$p_ruta_dir."";
}

$p_n_elements=0;

$p_dir=opendir($p_dir);

while(
$file=readdir($p_dir))
{
if (
$file!="." && $file!=".." && $file!=".htaccess" && $file!="index.html" && $file!="Thumbs.db" && $file!="config.dat")
{
$p_n_elements++;
}
}
closedir($p_dir);

}
?>
<?php
$p_number_elements
="".$p_n_elements."";
$p_totales=ceil($p_number_elements/$p_number_elementos_pag);
$pag="".$_REQUEST['pag']."";
?>



<?
$back_total
="<a href=?pag=1>  <<</a>";
$next_total="<a href=?pag=$p_n_elements>  >></a>";
?>

<?php




if ($p_totales<$p_grupos_paginados)
{
$p_grupos_paginados="$p_totales";
}
else
{
$p_grupos_paginados="$p_grupos_paginados";
}



/// Si la página es cero ///
if ($pag==or $pag=="" or $pag<or $pag==1)
{
$p_ini=1;
$p_end="".$p_grupos_paginados."";


$p_ini_e="1";
$p_end_e="".$p_number_elementos_pag."";


$back="";
$next='<a href=?pag='.($pag+1).'>> </a>';

}
///



/// Si páginas superan el total ///
if ($pag>=$p_totales)
{

print 
"mayor";
$p_ini="".($p_totales)-($p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";


$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";


$back='<a href=?pag='.($pag-1).'>< </a>';
$next="";
}
///







if ($pag>&& $pag<$p_totales)
{



//if (($pag)+($p_grupos_paginados)>=$p_totales)
if ($pag>=$p_totales)
{

$p_ini="".($p_totales-$p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";

$back='<a href=?pag='.($pag-1).'>< </a>';
$next='<a href=?pag='.($pag+1).'>> </a>';

$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";


}
else
{







if ((
$pag)+($p_grupos_paginados)>=$p_totales)
{


$p_ini="".($p_totales)-($p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";

}
else
{
$p_ini="".($pag)."";
$p_end="".($p_ini)+($p_grupos_paginados)-(1)."";
}




if ((
$pag)*($p_number_elementos_pag)>$p_n_elements)
{
$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";
}
else
{
$p_end_e="".($pag)*($p_number_elementos_pag)."";
$p_ini_e="".($p_end_e)-($p_number_elementos_pag)+(1)."";
}



$back='<a href=?pag='.($pag-1).'>< </a>';
$next='<a href=?pag='.($pag+1).'>> </a>';







}

}



?>









<?php
print "<table width=50% border=0 cellpadding=0 cellspacing=1 align=center valign=middle>
<tr> 
<td align=center valign=middle colspan=$pages>
</td>
</tr><tr>"
;
?>

<?php

$x
=$p_ini_e-1;
$j=0;
echo 
"<b>$p_ini_e $p_end_e</b>";

for(
$i=$p_ini_e;$i<=$p_end_e;$i++)
{


print 
"<td align=center valign=middle>";


echo 
$f_files[$x];


print 
"</td>";





if ((
$j+1)%$p_cols==0)
{
print 
"</tr>";
}

$j++;














$x++;
}

print 
"</table>";
?>































<?php

echo $back_total
echo 
$back

for(
$i=$p_ini;$i<=$p_end;$i++)
{

print 
"<a href=?pag=".$i.">".$i."</a> ";

}

echo 
$next
echo 
$next_total

?>




Ahí pongo el código en breve pondré todo el script , ya no tira fallos el problema era que había que poner una variable más le puse $j=0; así pagina en base a eso y ya corta bien las cuentas de cada vuelta , el script funciona bien en breve lo pongo completo asi quien quiera que lo use pero podrá leer y paginar fotos , archivos de directorios con un include si se quieres para el archivo y desde un txt

En cuanto a la paginación programada permite que se pagine pues según las páginas que consten pero podemos agrupar las páginas en grupos y luego determinar cuantas entradas se muestran por página

En este día lo pongo completo

No obstante cualquiera que le vea algo pues lo podemos mejorar , creo que es un script muy útil para hacer de todo

Saludos !
  #6 (permalink)  
Antiguo 19/09/2012, 08:18
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 4 meses
Puntos: 20
Exclamación Respuesta: Separar en bucle por elementos

AQUI LES DEJO EL SCRIPT TERMINADO SI LO TESTEAN ME COMENTAN ALGO POR FAVOR , SALUDOS



Código PHP:

<style>
#pag_content
{
top:100px;
position:relative;
width:900px;
height:35px;
border:0px solid;
margin:auto;
}

#pag_number
{
float:left;
position:relative;
width:30px;
height:30px;
border:1px solid #000000;
margin-right:3px;
background-color:green;
font-family:Arial;
font-size:18px;
color:#000000;
text-align:center;
}


#pag_number:hover
{
background-color:red;
}

.pag_number
{
text-decoration:none;
color:#000000;
}

.pag_number:hover
{
text-decoration:none;
color:#FFFFFF;
}

</style>











<?php
/// Opciones gal,file o dir ///
$p_mode="file";
///

/// Tamaño miniaturas galería si se selecciona este modo ///
$p_mode_gal_width="120";
$p_mode_gal_height="120";
///

/// Rutas a los diferentes paths según modo seleccionado ///
$p_ruta_images="imagenes/banners";
$p_ruta_file="ejemplo.txt";
$p_ruta_dir="db_p/db_productos";
///

/// Número de columnas en paginación ///
$p_cols="3";
///

/// Números de grupos paginados en paginación solo números ///
$p_grupos_paginados="5";
///

/// Número de elementos a cargar por página ///
$p_number_elementos_pag="6";
///

?>




<?php
/// Cáculo de elementos en archivo de texto con salto de lineas ///
if ($p_mode=="file")
{
$p_file=file("".$p_ruta_file."");
$p_n_elements=0;
for(
$p=0;$p<sizeof($p_file);$p++)
{
$f_files[]=$p_file[$p];
$p_n_elements++;
}
}
///
?>


<?php
/// Cáculo de archivo en directorios tanto imágenes como archivos por ejemplo tipo php ///
if ($p_mode=="gal" or $p_mode=="dir")
{

if (
$p_mode=="gal")
{
$p_dir="".$p_ruta_images."";
}
else
{
$p_dir=="".$p_ruta_dir."";
}

$p_n_elements=0;

$p_dir=opendir($p_dir);

while(
$file=readdir($p_dir))
{
if (
$file!="." && $file!=".." && $file!=".htaccess" && $file!="index.html" && $file!="Thumbs.db" && $file!="config.dat")
{
$p_n_elements++;

///
if ($p_mode=="gal")
{
$f_files[]="$p_ruta_images/$file";
}
else
{
$f_files[]="$p_ruta_dir/$file";
}

///

}
}
closedir($p_dir);
}
///
?>



<?php
/// Cáculos finales para paginación ///
$p_number_elements="".$p_n_elements."";
$p_totales=ceil($p_number_elements/$p_number_elementos_pag);
$pag="".$_REQUEST['pag']."";
$p_number_elementos_pag="".ceil($p_n_elements/$p_totales)."";
///
?>



<?
$back_total
="<div id='pag_number'><a href='?pag=1' class='pag_number'>  <<</a></div>";
$next_total="<div id='pag_number'><a href='?pag=$p_n_elements' class='pag_number'>  >></a></div>";
?>

<?php
if ($p_totales<$p_grupos_paginados)
{
$p_grupos_paginados="$p_totales";
}
else
{
$p_grupos_paginados="$p_grupos_paginados";
}


/// PAGINACIÖN ///

/// Si la página es cero ///
if ($pag==or $pag=="" or $pag<or $pag==1)
{
$p_ini=1;
$p_end="".$p_grupos_paginados."";


$p_ini_e="1";
$p_end_e="".$p_number_elementos_pag."";


$back="";
$next='<div id="pag_number"><a href=?pag='.($pag+1).' class="pag_number">> </a></div>';

}
///



/// Si páginas superan el total ///
if ($pag>=$p_totales)
{

$p_ini="".($p_totales)-($p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";


$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";


$back='<div id="pag_number"><a href=?pag='.($pag-1).' class="pag_number">< </a></div>';
$next="";
}
///


if ($pag>&& $pag<$p_totales)
{

if (
$pag>=$p_totales)
{

$p_ini="".($p_totales-$p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";

$back='<div id="pag_number" class="pag_number"><a href=?pag='.($pag-1).'>> </a></div>';
$next='<div id="pag_number" class="pag_number"><a href=?pag='.($pag+1).'>> </a></div>';

$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";


}
else
{


if ((
$pag)+($p_grupos_paginados)>=$p_totales)
{
$p_ini="".($p_totales)-($p_grupos_paginados)+(1)."";
$p_end="".$p_totales."";
}
else
{
$p_ini="".($pag)."";
$p_end="".($p_ini)+($p_grupos_paginados)-(1)."";
}

if ((
$pag)*($p_number_elementos_pag)>$p_n_elements)
{
$p_ini_e="".($p_n_elements)-($p_number_elementos_pag)+(1)."";
$p_end_e="".$p_n_elements."";
}
else
{
$p_end_e="".($pag)*($p_number_elementos_pag)."";
$p_ini_e="".($p_end_e)-($p_number_elementos_pag)+(1)."";
}

$back='<div id="pag_number"><a href=?pag='.($pag-1).' class="pag_number">< </a></div>';
$next='<div id="pag_number"><a href=?pag='.($pag+1).' class="pag_number">> </a></div>';

}

}
?>





<?php
print "<table width=50% border=0 cellpadding=0 cellspacing=1 align=center valign=middle>
<tr> 
<td align=center valign=middle colspan=$pages>
</td>
</tr><tr>"
;
?>

<?php

$x
=$p_ini_e-1;
$j=0;
echo 
"<b>$p_ini_e $p_end_e</b>";

for(
$i=$p_ini_e;$i<=$p_end_e;$i++)
{


print 
"<td align=center valign=middle>";

if (
$p_mode=="dir")
{
include(
"".$f_files[$x]."");
}

if (
$p_mode=="gal")
{
echo 
'<img src="'.$f_files[$x].'" width="'.$p_mode_gal_width.'" height="'.$p_mode_gal_height.'">';
}

if (
$p_mode=="file")
{
echo 
$f_files[$x];
}

print 
"</td>";

if ((
$j+1)%$p_cols==0)
{
print 
"</tr>";
}

$j++;

$x++;
}

print 
"</table>";
?>


<div id="pag_content">
<?php
/// Paginación y Grupos Paginados ///


echo $back_total
echo 
$back


for(
$i=$p_ini;$i<=$p_end;$i++)
{



if (
$i=="")
{
print 
"o";
}
else
{
echo 
'<div id="pag_number">';
print 
"<a href=?pag=".$i." class='pag_number'>".$i."</a> ";
echo 
'</div>';
}



}


echo 
$next
echo 
$next_total


///
?>
</div>

Etiquetas: bucle, elementos
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 15:30.