Array sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array sortieren

    Ich habe in einem Array Dateinamen gespeichert, die nach einem bestimmten Schema sortiert werden sollen. Dazu wollte ich die Funktion usort nehmen.
    Das Array soll am Ende wie folgt sortiert sein:
    g1307026.jpg
    g1307025.jpg
    g1307024.jpg
    g1307023.jpg
    g1307022.jpg
    g1307021.jpg
    g0308023.jpg
    g0308022.jpg
    g0308021.jpg
    g3108025.jpg
    g3108024.jpg
    g3108023.jpg
    g3108022.jpg
    g3108021.jpg
    Die Dateinamen fangen also immer mit einem g an, gefolgt von einem Datum und dann einer Zahl, bei gleichem Datum fortlaufend.
    Wie schreibe ich die Funktion?
    Mein Ansatz:
    PHP-Code:
    function cmp ($a$b) {
     if (
    $a == $b) return 0;
     
    $a_datum=strtotime(substr($a,1,6));
     
    $a_num=substr($a,7,strpos($a,".")-7);
     
    $b_datum=strtotime(substr($b,1,6));
     
    $b_num=substr($b,7,strpos($b,".")-7);
     if (
    $a_datum==$b_datum) {
      return (
    $a_num $b_num) ? -1;
                 }
     else {
      return (
    $a_datum $b_datum) ? -1;  
          }
                   }

    usort ($a"cmp"); 
    So funktioniert das Sortieren mit dem Datum noch nicht. Liegt bestimmt am strtotime? Habt ihr ne andere Idee?

  • #2
    Speichere doch die Dateinamen nicht in der From

    g310802...

    sondern in der Form

    g020831... (yymmdd)

    Jetzt kannst Du das Array einfach mit sort() sortieren !

    Wenn auch die letzte Ziffer (hinter dem Datum) sortiert werden muss, wirst Du es noch mal mit usort() versuchen müssen. Dürfte jetzt aber wesentlich einfacher sein.

    taratus

    Kommentar


    • #3
      Habs geschafft!
      PHP-Code:
      function cmp ($a$b) {
       if (
      $a == $b) return 0;
       
      $a_datum=substr($a,1,6);
       
      $a_datum=substr($a_datum,4,2).substr($a_datum,2,2).substr($a_datum,0,2);
       
      $a_datum=strtotime($a_datum);
       
      $a_num=substr($a,7,strpos($a,".")-7);
       
      $b_datum=substr($b,1,6);
       
      $b_datum=substr($b_datum,4,2).substr($b_datum,2,2).substr($b_datum,0,2);
       
      $b_datum=strtotime($b_datum);
       
      $b_num=substr($b,7,strpos($b,".")-7);
       if (
      $a_datum==$b_datum) {
        return (
      $a_num $b_num) ? -1;
                   }
       else {
        return (
      $a_datum $b_datum) ? -1;  
            }
                     }

      usort ($a_neu"cmp"); 

      Kommentar

      Lädt...
      X