Nina: spezielle Sortierung für Arrays

Hallo,

bisher kam ich immer recht gut mit asort aus, wobei ja der Index bestehen bleibt und der Array danach sortiert ist.
Nun ist es aber so, dass bei den Inhalten ein Sonderzeichen | vorkommt. Dieses wird dummerweise wie einer der letzten Buchstaben des Alphabets behandelt.
Stattdessen sollte eben dieses wie die 0 oder wie ein A behandelt werden, bzw. jeweils ganz oben stehen. Doch die übrigen Buchstaben/Zahlen/Zeichen sollten wie gewohnt behandelt werden.
Kann man den Sonderstatus dieses | irgendwo festelegen, sodass dies bei der Sortierung berücksichtigt wird oder gibt es eine Sortierfunktion, die ich dementsprechend modifizieren könnte?

Anhand eines kleinen Beispiels möchte ich das nochmal kurz darstellen:

$arr_unsortiert[1]='bla1|blub1|beep1';
$arr_unsortiert[2]='bla1|blub2|beep1';
$arr_unsortiert[3]='bla1|blub12|beep1';
//Ausgabe:
//******************
Array
(
    [3] => bla1|blub12|beep1
    [1] => bla1|blub1|beep1
    [2] => bla1|blub2|beep1
)
//******************

//GEWÜNSCHTE Ausgabe:
//******************
Array
(
    [1] => bla1|blub1|beep1
    [3] => bla1|blub12|beep1
    [2] => bla1|blub2|beep1
)
//******************

Bitte um hilfreiche Tipps.
Besten Dank,
und schönen Feiertag noch!

  1. Hallo,

    //GEWÜNSCHTE Ausgabe:
        [1] => bla1|blub1|beep1
        [3] => bla1|blub12|beep1
        [2] => bla1|blub2|beep1

    Warum soll blubb zwölf vor blubb zwei sein? Wenn nicht das wäre dann hätte ich natsort() vorgeschlagen.

    Jeena

    --
    Tage wie dieser gibt es immer wieder | Jlog | Gourmetica Mentiri
    1. Hi Jeena,

      leider geht bei der Sortierung immer noch nicht alles wie gewünscht :(
      Anderes/Besseres Beispiel:
      <?
      $arr_unsortiert[1]='blub';
      $arr_unsortiert[2]='blub2|beep1';
      $arr_unsortiert[3]='blub|beep1';
      natsort($arr_unsortiert);
      print_r($arr_unsortiert);
      ?>
      Wünschenswert wäre die Reihenfolge 1,3,2 und nicht 1,2,3.

      Gibt es nicht eine "raw" Funktion von asort, wo man "einfach" die Reihenfolge festlegen kann, nach der Sortiert wird? Sodass eben das | wie eine 0 zählt?
      Oder wie würdest Du das lösen?

      DANKE

      1. Moin!

        Gibt es nicht eine "raw" Funktion von asort, wo man "einfach" die Reihenfolge festlegen kann, nach der Sortiert wird? Sodass eben das | wie eine 0 zählt?
        Oder wie würdest Du das lösen?

        usort o.ä. und eine eigene Vergleichsfunktion bieten sich doch an.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. so gehts :-)

          function sortieren($a, $b) {
              $a_arr = explode('|', $a);
              $b_arr = explode('|', $b);
              foreach (range(0,3) as $i) {
                  if ( $a_arr[$i] < $b_arr[$i] ) {
                      return -1;
                  }
                  elseif ( $a_arr[$i] > $b_arr[$i] ) {
                      return 1;
                  }
              }
              return -1;
          }
          $arr_unsortiert[1]='blub';
          $arr_unsortiert[2]='blub2|beep1';
          $arr_unsortiert[3]='blub|beep1';
          usort($arr_unsortiert,'sortieren');
          print_r($arr_unsortiert);