ordine per data

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
Buongirono, questo codice mi carica dinamicamente dei pdf e li ordina in modo alfabetico invece che per data.
Qual'è il punto da correggere?

PHP:
<?php
$file=glob("pdf_decreti/*.pdf");
    foreach($file as $nome){
    	 echo "".date("d.m.Y", filemtime($nome))."<br><br/>";
}?> 
		<?php	function dir_list($directory = FALSE)
												{
	$dirs= array();
  $files = array();
if ($handle = opendir("./" . $directory))
{
while ($file = readdir($handle))
{
if (is_dir("./{$directory}/{$file}"))
{
if ($file != "." & $file != "..") $dirs[] = $file; }
else
{
if ($file != "." & $file != "..") $files[] = $file; }
}
}
closedir($handle);
reset($dirs); sort($dirs); reset($dirs);
reset($files); sort($files); reset($files);
echo ""; while(list($key, $value) = each($dirs))
{
$d++; echo "<li><a href=\"{$value}\">{$value}/</a>\n"; }
echo "</ul>\n"; echo ""; while(list($key, $value) = each($files))
{
$f++; echo "<li id='lista_pdf'><ahref=\"/consorzio-bus-car {$directory}{$value}\">{$value}</a><br/><br/>"; }
echo "</ul>\n";
if (!$d) $d = "0"; if (!$f) $f = "0"; echo "<br/><br/>Sono presenti <strong>{$f}</strong> pdf.</strong>\n"; }
dir_list("/pdf_decreti/"); 


?>
 
ciao
prova a fare questi passaggi
PHP:
<?php
$file_orig=glob("pdf_decreti/*.pdf");//leggi i file (ho cambiato il nome dell'array)
$ordine_data=array();//array di appoggio
$file=array();//per non stare a cambiare il nome nel resto dello script
foreach($file_orig as $nome){
	$data_ts=filemtime($nome); //estrai la data in timestamp
	echo "".date("d.m.Y", filemtime($nome))."<br><br/>";
	//inserisci i nomi dei file nell' array  di appoggio con chiave = data in tmestamp
	$ordine_data[$data_ts]=$nome;
}
//ordini per chiave della'array (la data)
ksort($ordine_data);//krsort() per ordinare all'inverso
//ti riporti a $file
foreach($ordine_data as $data => $nome){
	$file[]=$nome;
}
//eccetera....
?>
se qualcuno trova qualcosa di meglio lo posti
 
grazie borgo, ho cambiato il codice in questo modo ma va cmq per ordine alfabetico.. Ho sbagliato a inserire il codice?

PHP:
 <?php
$file_orig=glob("pdf_decreti/*.pdf");//leggi i file (ho cambiato il nome dell'array)
$ordine_data=array();//array di appoggio
$file=array();//per non stare a cambiare il nome nel resto dello script
foreach($file_orig as $nome){
    $data_ts=filemtime($nome); //estrai la data in timestamp
    echo "".date("d.m.Y", filemtime($nome))."<br><br/>";
    //inserisci i nomi dei file nell' array  di appoggio con chiave = data in tmestamp
    $ordine_data[$data_ts]=$nome;
}
//ordini per chiave della'array (la data)
ksort($ordine_data);//krsort() per ordinare all'inverso
//ti riporti a $file
foreach($ordine_data as $data => $nome){
    $file[]=$nome;
}

?>
        <?php    function dir_list($directory = FALSE)
                                                {
    $dirs= array();
  $files = array();
if ($handle = opendir("./" . $directory))
{
while ($file = readdir($handle))
{
if (is_dir("./{$directory}/{$file}"))
{
if ($file != "." & $file != "..") $dirs[] = $file; }
else
{
if ($file != "." & $file != "..") $files[] = $file; }
}
}
closedir($handle);
reset($dirs); sort($dirs); reset($dirs);
reset($files); sort($files); reset($files);
echo ""; while(list($key, $value) = each($dirs))
{
$d++; echo "<li><a href=\"{$value}\">{$value}/</a>\n"; }
echo "</ul>\n"; echo ""; while(list($key, $value) = each($files))
{
$f++; echo "<li id='lista_pdf'><ahref=\"/consorzio-bus-car {$directory}{$value}\">{$value}</a><br/><br/>"; }
echo "</ul>\n";
if (!$d) $d = "0"; if (!$f) $f = "0"; echo "<br/><br/>Sono presenti <strong>{$f}</strong> pdf.</strong>\n"; }
dir_list("/pdf_decreti/"); 


?>
 
Prova così (non vedo perché leggi due volte la cartella):
PHP:
<?php
$files = glob('pdf_decreti/*.pdf');

usort($files, function ($a, $b) {
    $aMtime = filemtime($a);
    $bMtime = filemtime($b);
    
    if ($aMtime == $bMtime) {
        return 0;
    }
    
    return ($aMtime > $bMtime) ? 1 : -1;
});

var_dump($files);
?>
 
Oppure anche cosi

PHP:
<?
$files = glob('pdf_decreti/*.pdf');
$date_files = array(); //array date

foreach($files as $file) $date_files[$file] = filemtime($file); //assegnazione numerica

sort($date_files); //ordinamento dell'array secondo l'assegnazione numerica in ordine crescente

//stampiamo i files

foreach($date_files as $file => $data) echo "file: ".$file." data: ".$data."<br>";

?>

Premetto di non averla testata, mi sono basato su base teorica perciò fammi sapere
 
Ultima modifica:
Non funziona ancora con entrambi. Il tuo ale nonostante gli errori del compilatore alla riga 4 e 13 mi stampa la lunghezza della stringa mentre il tuo nefyt valori di questo tipo
file: 0 data: 1338199780
file: 1 data: 1338202724
file: 2 data: 1338979105
file: 3 data: 1339407272
 
cmq il tuo codice ale mi stampa questo
0 => string 'pdf_decreti/recupero.pdf' (length=24)
1 => string 'pdf_decreti/20-4-2012.pdf' (length=25)
2 => string 'pdf_decreti/sqlinjections.pdf' (length=29)
3 => string 'pdf_decreti/dai.pdf' (length=19)
 
Mmmm prova cosi e fammi sapere
PHP:
<?
$files = scandir('pdf_decreti/*.pdf');
$date_files = array(); //array date

foreach($files as $file) $date_files[$file] = filemtime($file); //assegnazione numerica

sort($date_files); //ordinamento dell'array secondo l'assegnazione numerica in ordine crescente

//stampiamo i files

foreach($date_files as $file => $data){ 
         $d = date_create();
         date_timestamp_set($d,$data);
         echo "file: ".$file." data: ".date_format($d,'Y-m-d')."<br>"; 
}

?>
 
così non vedo addirittura niente... scusate ragazzi vi sto facendo diventar matti XD
 

Discussioni simili