Foros del Web » Programando para Internet » PHP »

Listar numeros anteriores a un nº en concreto y uso del foreach

Estas en el tema de Listar numeros anteriores a un nº en concreto y uso del foreach en el foro de PHP en Foros del Web. Hola, como se podrian listar todos los numeros anteriores a un numero, pj: a 5 k kedase 5 4 3 2 1 0 Y que ...
  #1 (permalink)  
Antiguo 01/07/2007, 07:39
 
Fecha de Ingreso: abril-2007
Mensajes: 213
Antigüedad: 17 años
Puntos: 0
Listar numeros anteriores a un nº en concreto y uso del foreach

Hola, como se podrian listar todos los numeros anteriores a un numero, pj: a 5
k kedase
5
4
3
2
1
0

Y que todos ellos quedasen con un vinculo a ?page=elnumero

Siento crear otro tema, pero es que la duda no tiene nada que ver

Otra pregunta, se que tengo que utilizar el foreach, pero me lio un poco, si tengo 50 archivos, cada uno de ellos con un numero, 1.txt, 2.txt, etc. y elimino el 40.txt como se haria en php para que el 41.txt se llamase 40, el 42 41, y asi con todos los que van detrás... Habría que copiar el 41 con el nombre de 40, eliminar 41, copiar 42 con nombre de 41, eliminar 42, en este orden, con el foreach se puede hacer para todos los archivos, pero como se programaria? Tengo un codigo que detecta el ultimo archivo, vamos cuenta todos los archivos del directorio asi que ya obtendria k el ultimo seria 50.txt

Gracias

Última edición por carlosgs91; 01/07/2007 a las 08:27
  #2 (permalink)  
Antiguo 01/07/2007, 07:56
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: Una función que elimine el ultimo digito.

Hola carlosgs91

Te contesto a la primera pregunta, que es la única que me se.

Utiliza la función sub_str(), aunque si lo que tienes es un número, creo que tendrás que pasarlo a string

Saludos,
  #3 (permalink)  
Antiguo 01/07/2007, 08:13
 
Fecha de Ingreso: abril-2007
Mensajes: 213
Antigüedad: 17 años
Puntos: 0
Re: Una función que elimine el ultimo digito.

s m ocurrio una forma mejor para hacerlo antes de ver tu respuesta.

$resultado = $numero/10 + 0.4;
round($resultado);
si numero/10 da 5.2 l sumas 0.4 redondeas y t da 6
si el numero es x ejemplo 5.9 sumas 0.4 redondeas y t da 5

La funcion la necesitaba para paginar las noticias y saber cuantas paginas debia haber, esto me sirve, aunque probare tu funcion para ver como va.

Gracias, a ver si alguien sabe la egunda k tp es dificil xd
  #4 (permalink)  
Antiguo 01/07/2007, 09:19
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Re: Listar numeros anteriores a un nº en concreto y uso del foreach

Mi repsuesta a la segunda pregunta:
Para mi gusto es una tontería hacer eso. Si es un archivo de noticias muy fácilmente llegará el día en que tengas almacenadas cientos de noticias, o incluso miles.
Luego si eliminas la noticia 3 tener que renombrar 500 archivos no lo veo factible.

Yo en su lugar usaría un "listado" que contuviera los nombres de los archivos que necesitas:
Por ejemplo:

contenido de Listado.txt:
1
3
16
17
18
21
22
23

como vemos tenemos nombres salteados. se supone que hemos borrado los numeros intermedios. y modificar el contenido del archivo de texto es sumamente facil.

y ahora
Código PHP:
$nombre_archivo=file("listado.txt");
$total_archivos=count($nombre_archivo);

//en $total_archivos tienes el numero total de archivos que hay 
// y en $nombre_archivo tienes un array con los nombres de los archivos (sin txt) 
pero vamos, respondiendo justamente a lo que quieres,se podría ahcer así:

Código PHP:
//$archivo_a_eliminar contendráel numero de archivo, ejemplo 40.
//$total_archivos contendrá el total de archivos del directorio.
unlink($archivo_a_eliminar ".txt");
for(
$i=($archivo_a_eliminar+1); $i<=$total_archivos;$i++){
copy($i ".txt", ($i-1) . ".txt");
unlink($i ".txt");

  #5 (permalink)  
Antiguo 01/07/2007, 15:12
 
Fecha de Ingreso: abril-2007
Mensajes: 213
Antigüedad: 17 años
Puntos: 0
Re: Listar numeros anteriores a un nº en concreto y uso del foreach

en teoria el hosting deberia soportar cambiar el nombre a 496 archivos y eliminar otros 496, pero podria no ser bueno.

Lo que tu dices parece mejor, pero no sabria si tengo

1
2
3
4
5
6
7

eliminar el numero 3 de ese listado, y luego para paginarlos seria algo complicado...

el script de paginacion que llevo hecho es un poco extraño pero sirve, te lo pongo si quieres:

Código PHP:
<?
//CGSNoticias, creado por Carlos Gómez Suárez www.carlosgomezsuarez.uni.cc//
//Eres libre de distribuirlo y modificarlo, pero siempre dejando mi nombre en el script//

//Calculo el numero total de noticias que hay//

$dir "data"
$dh  opendir($dir); 
while (
false !== ($nombre_archivo readdir($dh))) { 
   
$archivos[] = $nombre_archivo


//Escribo esto para mostrar los resultados cuando la variable page no esta definida//

$total_archivos count($archivos); 
$total $total_archivos-2;   

$ultima $total;
$pen $total-1;
$antepen $total-2;
$antepen2 $total-3;
$antepen3 $total-4;
$antepen4 $total-5;
$antepen5 $total-6;
$antepen6 $total-7;
$antepen5 $total-8;
$antepen6 $total-9;
$antepen7 $total-10;
$antepen8 $total-11;

$cambiopagina $page 5;
$cambiopagina2 $total $cambiopagina;
$cambiopagina3 $total $cambiopagina 1;
$cambiopagina4 $total $cambiopagina 2;
$cambiopagina5 $total $cambiopagina 3;
$cambiopagina6 $total $cambiopagina 4;
$cambiopagina7 $total $cambiopagina 5;
$cambiopagina8 $total $cambiopagina 6;
$cambiopagina9 $total $cambiopagina 7;
$cambiopagina10 $total $cambiopagina 8;
$cambiopagina11 $total $cambiopagina 9;

if(!
$page && !$id) {
if(
file_exists("data/$ultima.txt")) {
$fp=fopen("data/$ultima.txt""r+");
$vanha=fread($fpfilesize("data/$ultima.txt"));
$array1 explode("|"$vanha);
echo
"<h2><a href='?id=$ultima'>$array1[0]</a></h2><strong>$array1[1]</strong><br><br>$array1[2]";}
if(
file_exists("data/$pen.txt")) {
$fp1=fopen("data/$pen.txt""r+");
$vanha1=fread($fp1filesize("data/$pen.txt"));
$array2 explode("|"$vanha1);
echo
"<h2><a href='?id=$pen'>$array2[0]</a></h2><strong>$array2[1]</strong><br><br>$array2[2]";}
if(
file_exists("data/$antepen.txt")) {
$fp2=fopen("data/$antepen.txt""r+");
$vanha2=fread($fp2filesize("data/$antepen.txt"));
$array3 explode("|"$vanha2);
echo
"<h2><a href='?id=$antepen'>$array3[0]</a></h2><strong>$array3[1]</strong><br><br>$array3[2]";}
if(
file_exists("data/$antepen2.txt")) {
$fp3=fopen("data/$antepen2.txt""r+");
$vanha3=fread($fp3filesize("data/$antepen2.txt"));
$array4 explode("|"$vanha3);
echo
"<h2><a href='?id=$antepen2'>$array4[0]</a></h2><strong>$array4[1]</strong><br><br>$array4[2]";}
if(
file_exists("data/$antepen3.txt")) {
$fp4=fopen("data/$antepen3.txt""r+");
$vanha4=fread($fp4filesize("data/$antepen3.txt"));
$array5 explode("|"$vanha4);
echo
"<h2><a href='?id=$antepen3'>$array5[0]</a></h2><strong>$array5[1]</strong><br><br>$array5[2]";}
}

//Escribo lo que debe paginar en caso de que la variable page este definida//

elseif($page !== "" && !$id) {
if(
file_exists("data/$cambiopagina2.txt")) {
$fp5=fopen("data/$cambiopagina2.txt""r+");
$vanha5=fread($fp5filesize("data/$cambiopagina2.txt"));
$array6 explode("|"$vanha5);
echo
"<h2><a href='?id=$cambiopagina2'>$array6[0]</a></h2><strong>$array6[1]</strong><br><br>$array6[2]";}
if(
file_exists("data/$cambiopagina3.txt")) {
$fp6=fopen("data/$cambiopagina3.txt""r+");
$vanha6=fread($fp6filesize("data/$cambiopagina3.txt"));
$array7 explode("|"$vanha6);
echo
"<h2><a href='?id=$cambiopagina3'>$array7[0]</a></h2><strong>$array7[1]</strong><br><br>$array7[2]";}
if(
file_exists("data/$cambiopagina4.txt")) {
$fp7=fopen("data/$cambiopagina4.txt""r+");
$vanha7=fread($fp7filesize("data/$cambiopagina4.txt"));
$array8 explode("|"$vanha7);
echo
"<h2><a href='?id=$cambiopagina4'>$array8[0]</a></h2><strong>$array8[1]</strong><br><br>$array8[2]";}
if(
file_exists("data/$cambiopagina5.txt")) {
$fp8=fopen("data/$cambiopagina5.txt""r+");
$vanha8=fread($fp8filesize("data/$cambiopagina5.txt"));
$array9 explode("|"$vanha8);
echo
"<h2><a href='?id=$cambiopagina5'>$array9[0]</a></h2><strong>$array9[1]</strong><br><br>$array9[2]";}
if(
file_exists("data/$cambiopagina6.txt")) {
$fp9=fopen("data/$cambiopagina6.txt""r+");
$vanha9=fread($fp9filesize("data/$cambiopagina6.txt"));
$array10 explode("|"$vanha9);
echo
"<h2><a href='?id=$cambiopagina6'>$array10[0]</a></h2><strong>$array10[1]</strong><br><br>$array10[2]";}
}

elseif(
$id !== "") {
if(
file_exists("data/$id.txt")) {
$fp10=fopen("data/$id.txt""r+");
$vanha10=fread($fp10filesize("data/$id.txt"));
$array11 explode("|"$vanha10);
echo
"<h2><a href='?id=$id'>$array11[0]</a></h2><strong>$array11[1]</strong><br><br>$array11[2]";}}

//Aqui estan los botones de anterior y siguiente//

$resultadopags $total/0.4
$totalpaginas round($resultadopags)-1;
$menospagina $page-1;
$maspagina $page+1;

if(!
$id) {echo"<hr>";}
if(!
$page && !$id) {echo"";}
elseif(
$page == "" && $id == "") {echo"";}
elseif(
$page 0) {echo"";}
elseif(
$page !== "" && $page !== "0" && $id == "") { echo"<a href='?page=$menospagina'>Anteriores</a>";}
if(!
$page && !$id) { echo""; }
elseif(
$page 0) {echo"";}
elseif(
$page !== "" && $page !== "0" && $page $totalpaginas && $id == "") { echo" - "; }
if(
$page $totalpaginas && $id == "") { echo"<a href='?page=$maspagina'>Siguientes</a>";}

?>
  #6 (permalink)  
Antiguo 01/07/2007, 17:09
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Re: Listar numeros anteriores a un nº en concreto y uso del foreach

script para eliminar la noticia (archivo) y quitarlo de la lista:
supongamos que tenemos el archivo lista.txt que es el que contiene el listado de noticias.

Código PHP:
//supongo recibido el numero del archivo a borrar en la variable $archivo.
$ext=".txt";
if (
file_exists($archivo $ext)){
       
//borramos el archivo:
       
unlink($archivo $ext);
       
//procedemos a quitarlo de la lista.
       
$lista=file("lista.txt");
       
$total_numeros=count($lista);
       
$punt=fopen("lista.txt","w");
           for(
$i=0;$i<$total_numeros;$i++){
                 if (
trim($lista[$i])!=$archivo){
                 
fwrite($punt,trim($lista[$i]) . "\r\n");
                 }
           }
       
fclose($punt);
}
else{
echo 
'no existe el archivo';

  #7 (permalink)  
Antiguo 01/07/2007, 17:33
 
Fecha de Ingreso: abril-2007
Mensajes: 144
Antigüedad: 17 años
Puntos: 4
Re: Listar numeros anteriores a un nº en concreto y uso del foreach

Si ya tienes todos los nombres de los archivos en $archivos, ¿Porque te complicas la vida con los nº de pagina?.
Usa el array $archivo, saves que $archivo[0] es la primera, $archivo[1] la segunda...y $archivo[count($archivo)-1] la ultima.
Asi da igual el nombre que se salten numeros en los archivos.
  #8 (permalink)  
Antiguo 01/07/2007, 18:27
 
Fecha de Ingreso: abril-2007
Mensajes: 144
Antigüedad: 17 años
Puntos: 4
Re: Listar numeros anteriores a un nº en concreto y uso del foreach

Código PHP:
$dir "data";  
$dh  opendir($dir);  
while (
$nombre_archivo readdir($dh)) {  
   list(
$num,$ext) = explode(".",$nombrearchivo);  //separa el nombre de la extension
   
if($ext=="txt") {  //Solo cuenta los archivos con extension txt  
       
$archivos[$num] = $nombre_archivo;
   }
}

paginas = array();

while(!
count($archivos)){  //Este bucle pone en el array paginas los archivos ordenados de menor a mayor
   
   
$menor key($array);
   foreach(
$array as $indice => $archivo){
       if( 
$indice $menor $menor $indice;
   }
   
paginas[] = $archivos[$menor];
   unset(
$archivos[$menor]);
 } 
En este punto tienes en $paginas todos los archivos .txt ordenados de menor a mayor independientemente del numero. $pagina[0] sera el 1.txt o el 2.txt o el primer nº que tengas.
Asi sabes que $paginas[5] es la pagina de noticias 6 independientemente del nº que tenga como nombre el archivo .txt. Puedes borrar los archivos intermedios que quieras, que no afectara al indice.
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 03:16.