Stránka 1 z 1

PHP vypis složky a nasledne seřazeni podle data  Vyřešeno

Napsal: 21 led 2013 22:21
od Pepis
Pomoci php vypišu obsah složky na web, seřadi se to nahodně takže pomoci tohohle kodu jsem to seřadil numericky

Kód: Vybrat vše

while($file_name=readdir($dir))
$dirFiles[] = $file_name;
rsort ($dirFiles,SORT_NUMERIC);
foreach($dirFiles as $file_name)


vše funguje až na to že rok 2012 je před 2013
Soubour mam pojmenovany ve formatu dd.mm.yyyy vim ze by vse vyresilo prejmenovani souboru na yyyy.mm.dd ale potřebuju to seřadit tak jak to pojmenovane je.

Pokud nevite tak by taky helplo vyfiltrovat stare soubory neco ve stylu - if startswith **.**.2012; $file_name=$file_name2012.

Php neumim kdyz potrebuju neco udelat prez php funkci pomaha strejček google ale teď jsem v koncich ;)

Re: PHP vypis složky a nasledne seřazeni podle data

Napsal: 22 led 2013 00:31
od CZechBoY
šlo by to přes usort

Kód: Vybrat vše

<?php
function cmpDate($a, $b)
{
    if ($a[0] == '.' || $b[0] == '.') {
        return 0;
    }
    $date_a = strtotime($a);
    $date_b = strtotime($b);
    return ($date_a < $date_b) ? -1 : 1;
}

while($file_name=readdir($dir))
    $dirFiles[] = $file_name;
usort($dirFiles, "cmpDate");

foreach ($dirFiles as $file) {
    echo htmlspecialchars($file) . "<br/>\n";
}



edit: vymazáno $a=array..
a proměnná se jmenuje $dirFiles

Re: PHP vypis složky a nasledne seřazeni podle data

Napsal: 22 led 2013 19:24
od Pepis
Hm super ale neumim to nejak vlozit do toho kodu - nefunguje mi to ;( takhle vypada muj nynejši kod.

Kód: Vybrat vše

<?php

$directory="files/";

$dir=opendir($directory);
$file_list="<table cellpadding=\"2\" cellspacing=\"2\">";

while($file_name=readdir($dir))
$dirFiles[] = $file_name;
rsort ($dirFiles,SORT_NUMERIC);
foreach($dirFiles as $file_name)
    {

    if(($file_name!=".")&&($file_name!=".."))
        {

        $file_list.="<tr><td><font style=\"color:#000000;font-family:arial,helvetica;font-size:9pt\">".$file_name."</font></td><td width=\"50\">&nbsp;</td><td><font style=\"color:#ffffff;font-family:arial,helvetica;font-size:9pt\"><a href=\"files/".$file_name."\">Stahni</a></font></td></tr>";
       
        }

    }

$file_list.="</table>";
closedir($dir);
echo $file_list;

?>

Re: PHP vypis složky a nasledne seřazeni podle data

Napsal: 22 led 2013 19:30
od CZechBoY
však stačí nahradit tu část se sortováním, když jsem poslal sortovací část...

Kód: Vybrat vše

<?php

$directory="files/";


function cmpDate($a, $b)
{
    if ($a[0] == '.' || $b[0] == '.') {
        return 0;
    }
    $date_a = strtotime($a);
    $date_b = strtotime($b);
    return ($date_a < $date_b) ? -1 : 1;
}

$dirFiles = array();
$dir=opendir($directory);
while($file_name=readdir($dir))
    $dirFiles[] = $file_name;
closedir($dir);
usort($dirFiles, "cmpDate");

$file_list="<table cellpadding=\"2\" cellspacing=\"2\">";
foreach($dirFiles as $file_name)
    {

    if(($file_name[0]!='.'))
        {

        $file_list.="<tr><td><font style=\"color:#000000;font-family:arial,helvetica;font-size:9pt\">".$file_name."</font></td><td width=\"50\">&nbsp;</td><td><font style=\"color:#ffffff;font-family:arial,helvetica;font-size:9pt\"><a href=\"files/".$file_name."\">Stahni</a></font></td></tr>";

        }

    }

$file_list.="</table>";
echo $file_list;

Re: PHP vypis složky a nasledne seřazeni podle data

Napsal: 22 led 2013 20:34
od Pepis
Hmm vypsalo to soubory takhle

Kód: Vybrat vše

13.01.2013 blablabla.mp3
25.12.2012 blablabala.mp3
06.01.2013  blablabla.mp3
20.01.2013  blablabla.mp3
10.01.2013  blablabla.mp3
19.01.2013  blablabla.mp3
23.12.2012  blablabla.mp3
19.01.2013  blablabla.mp3
01.01.2013  blablabla.mp3
22.12.2012  blablabla.mp3

takže to moc podle datumu nejde

Re: PHP vypis složky a nasledne seřazeni podle data

Napsal: 22 led 2013 22:07
od CZechBoY

Kód: Vybrat vše

<?php
$directory = "./files/";

if(substr($directory, -1, 1) != '/')
   $directory .= '/';

$dirFiles = array();
$dir = opendir($directory);
while($file_name = readdir($dir))
    $dirFiles[] = $file_name;
closedir($dir);
usort($dirFiles, "cmpDate");

$file_list = "<table cellpadding=\"2\" cellspacing=\"2\">";
foreach($dirFiles as $file_name) {
   if($file_name[0] != '.') {
      $file_list .= "<tr><td style=\"color:#000000;font-family:arial,helvetica;font-size:9pt\">" . htmlspecialchars($file_name, ENT_QUOTES) . "</td><td width=\"50\">&nbsp;</td><td style=\"color:#ffffff;font-family:arial,helvetica;font-size:9pt\"><a href=\"" . $directory . rawUrlEncode($file_name) . "\">Stahni</a></td></tr>";
   }
}
$file_list .= "</table>";
echo $file_list;


/** funkce na porovnání 2 dat
 * funkce si sama ořízne přebytečné znaky (na délku 10 znaků)
 * funkce předpokládá formát data "d.m.Y"
**/
function cmpDate($a, $b) {
    if ($a[0] == '.') {
        return $b[0] == '.' ? 0 : +1;
    } elseif($b[0] == '.') {
      return -1;
   }
   $a = substr($a, 0, 2+2+4+2); // 2 pro den, 2 pro měsíc, 4 pro rok, 2 tečky
   $b = substr($b, 0, 2+2+4+2); // 2 pro den, 2 pro měsíc, 4 pro rok, 2 tečky
    $date_a = date_create_from_format('d.m.Y', $a);
    $date_b = date_create_from_format('d.m.Y', $b);
   if($date_a === false) {
      return $date_b === false ? 0 : +1;
   } elseif($date_b === false) {
      return -1;
   }
    return ($date_a < $date_b) ? +1 : -1; // sestupně (první je nejmladšéí)
   //return ($date_a < $date_b) ? -1 : +1; // vzestupně (první je nejstarší)
}

Re: PHP vypis složky a nasledne seřazeni podle data

Napsal: 25 led 2013 20:05
od Pepis
Diky moc, ještě sem musel upgradovat php na verzi 5.3 aby fungovalo date_create_from_format a pote hodin function cmpDate pred funkci usort a vse jede jak ma ;)
Maš to umě, opravdu moc díky