Array sortieren

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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"); 

      Comment

      Working...
      X