Avatar billede andersthingholm Nybegynder
18. august 2005 - 13:11 Der er 5 kommentarer og
1 løsning

Sorter på dato udfra tekst

Hej,

Jeg har et PHP script, med denne kode:

    $output = "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
    $output .= "<media>\n";
   
    // Magazines
    $output .= "<magazines name='MAGAZINES'>\n";
        $dir = "media/magazines/";
    $handle = opendir($dir);
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $textArray = explode("_", $file);
            $date = $textArray[0];
            $tempName = $textArray[1];
            $textArray = explode(".", $tempName);
            $name = $textArray[0];
            $output .= "<file name='".$name."' url='".$dir.$file."'></file>\n";
        }
    }
    $output .= "</magazines>\n";
    closedir($handle);
   
    // Press Photes
    $output .= "<pressphotos name='PRESS PHOTOS'>\n";
        $dir = "media/pressphotos/";
    $handle = opendir($dir);
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != ".htaccess" && $file != ".htpasswd") {
            $textArray = explode("_", $file);
            $date = $textArray[0];
            $tempName = $textArray[1];
            $textArray = explode(".", $tempName);
            $name = $textArray[0];
            $output .= "<file name='".$name."' url='".$dir.$file."'></file>\n";
        }
    }
    $output .= "</pressphotos\n>";
    closedir($handle);

    // Press Releases
    $output .= "<pressreleases name='PRESS RELEASES'>\n";
        $dir = "media/pressreleases/";
    $handle = opendir($dir);
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $textArray = explode("_", $file);
            $date = $textArray[0];
            $tempName = $textArray[1];
            $textArray = explode(".", $tempName);
            $name = $textArray[0];
            $output .= "<file name='".$name."' url='".$dir.$file."'></file>\n";
        }
    }
    $output .= "</pressreleases>\n";
    closedir($handle);

   
    $output .= "</media>";
   
    echo $output;

Det spytter noget XML ud:

<?xml version="1.0" encoding="iso-8859-1" ?>
<media>
<magazines name='MAGAZINES'>
</magazines>
<pressphotos name='PRESS PHOTOS'>
<file name='' date='test.txt' url='media/pressphotos/test.txt'></file>
<file name='Press Photo A' date='16082005' url='media/pressphotos/16082005_Press Photo A.pdf'></file>
<file name='Press Photo B' date='16082005' url='media/pressphotos/16082005_Press Photo B.pdf'></file>
<file name='Press Photo C' date='16082005' url='media/pressphotos/16082005_Press Photo C.pdf'></file>
<file name='Press Photo D' date='16082005' url='media/pressphotos/16082005_Press Photo D.pdf'></file>
<file name='Press Photo E' date='16082005' url='media/pressphotos/16082005_Press Photo E.pdf'></file>
<file name='Press Photo Logo A' date='17082005' url='media/pressphotos/17082005_Press Photo Logo A.pdf'></file>
<file name='Press Photo Logo B' date='17082005' url='media/pressphotos/17082005_Press Photo Logo B.pdf'></file>
<file name='Press Photo Logo C' date='17082005' url='media/pressphotos/17082005_Press Photo Logo C.pdf'></file>
<file name='Press Photo Logo D' date='17082005' url='media/pressphotos/17082005_Press Photo Logo D.pdf'></file>
<file name='Press Photo Logo E' date='17082005' url='media/pressphotos/17082005_Press Photo Logo E.pdf'></file>
</pressphotos
><pressreleases name='PRESS RELEASES'>
</pressreleases>
</media>

Som det kan ses på filnavnene er der en dato foran '_'. Er der nogen der kan hjælpe mig med at sortere listen, så de nyeste kommer ud først og ikke alfabetisk som i ovenstående filfælde?

VH

Anders
Avatar billede coderdk Praktikant
19. august 2005 - 16:44 #1
Smid alle entries i et array, i stedet for $output brug derefter usort() http://dk2.php.net/usort som så skal sortere efter den korrekte key, derefter foreach()'er du bare ud i $output
Avatar billede coderdk Praktikant
19. august 2005 - 16:45 #2
Ja, du er også nødt til at splitte datoen ud i et ordentligt format der kan sorteres, som f.eks. yyyymmdd i stedet for det der underlige format ;P
Avatar billede andersthingholm Nybegynder
19. august 2005 - 19:08 #3
Hej igen,

Så har jeg smidt det i arrays, men hvordan sorteres den? Der skal først sorteres faldende på dato, derefter stigende på navn.

    // Press Photes
    $output .= "<pressphotos name='PRESS PHOTOS'>\n";
        $dir = "media/pressphotos/";
    $handle = opendir($dir);
    $fileArray = array();
    $i = 0;
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != ".htaccess" && $file != ".htpasswd" && $file != "test.txt") {
            $textArray = explode("_", $file);
            $sortKey = $textArray[0];
            $tempName = $textArray[1];
            $textArray = explode(".", $tempName);
            $name = $textArray[0];
            $fileArray[$i][0] = $sortKey;
            $fileArray[$i][1] = $name;
            $fileArray[$i][2] = $dir.$file;
            $i++;
        }
    }
    for ($i=0; $i < sizeof($fileArray); $i++){
        $output .= "<file name='".$fileArray[$i][1]."' url='".$fileArray[$i][2]."'></file>\n";
    }
   
    $output .= "</pressphotos\n>";
    closedir($handle);
Avatar billede andersthingholm Nybegynder
19. august 2005 - 19:09 #4
$sortKey er datoen i yyyymmdd format :-)
Avatar billede coderdk Praktikant
19. august 2005 - 19:46 #5
Næsten kopieret fra det link jeg gav:

function cmp( $a, $b )
{
  if ( $a[0] == $b[0] )
  {
      return 0;
  }
  return ( $a[0] < $b[0] ) ? -1 : 1;
}

// Din kode:

    // Press Photes
    $output .= "<pressphotos name='PRESS PHOTOS'>\n";
        $dir = "media/pressphotos/";
    $handle = opendir($dir);
    $fileArray = array();
    $i = 0;
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && $file != ".htaccess" && $file != ".htpasswd" && $file != "test.txt") {
            $textArray = explode("_", $file);
            $sortKey = $textArray[0];
            $tempName = $textArray[1];
            $textArray = explode(".", $tempName);
            $name = $textArray[0];
            $fileArray[$i][0] = $sortKey;
            $fileArray[$i][1] = $name;
            $fileArray[$i][2] = $dir.$file;
            $i++;
        }
    }

    // Ny linje:
    usort( $fileArray, 'cmp' );

    for ($i=0; $i < sizeof($fileArray); $i++){
        $output .= "<file name='".$fileArray[$i][1]."' url='".$fileArray[$i][2]."'></file>\n";
    }
 
    $output .= "</pressphotos\n>";
    closedir($handle);


:)
Avatar billede andersthingholm Nybegynder
19. august 2005 - 22:38 #6
Super, tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester