Mastershrimp: Array unabhängig von Groß-/Kleinschr. sortieren

Heyho!

Es gibt ja 3 verschiedene Arten mit sort() einen Array zu sortieren:
SORT_REGULAR - Vergleiche Einträge normal
SORT_NUMERIC - Vergleiche Einträge numerisch
SORT_STRING - Vergleiche Einträge als Strings

Ich möchte nun, dass in einem Array die Werte alphabetisch geordnet werden - und zwar so, dass "a" wie "A" behandelt wird. SORT_STRING fällt da schonmal weg. SORT_NUMERIC ja sowieso, oder?

Und SORT_REGULAR bringt bei mir irgendwie dasselbe Ergebnis wie SORT_STRING...

Weiß einer von euch, wie ich den Array so sortieren kann, dass er Groß/-Kleinschreibung _nicht_ beachtet?

Habe schon hier, im PHP Manual und in Google gesucht, aber irgendwie nix brauchbares herausbekommen.

Danke schonmal!

Chapeau! ;)

Mastershrimp

--
Kämpft für die Rettung von dem Genitiv!
  1. Hi Mastershrimp,

    Habe schon hier, im PHP Manual und in Google gesucht, aber irgendwie nix brauchbares herausbekommen.

    Vielleicht hilft dir das, hab ich in SelfPHP gefunden: http://www.selfphp.de/funktionsreferenz/array_funktionen/natcasesort.php

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:| mo:) zu:|
    Signatur 3 von 3:
    Fragen zu Formularen?
    http://tutorial.riehle-web.com hilft!
    1. Heyho!

      Vielleicht hilft dir das, hab ich in SelfPHP gefunden: http://www.selfphp.de/funktionsreferenz/array_funktionen/natcasesort.php

      Ja! Perfekt. Werde es direkt mal ausprobieren. Würde mich nochmal melden, wenn's nicht klappt.

      Danke!

      Chapeau! ;)

      Mastershrimp

      --
      Kämpft für die Rettung von dem Genitiv!
      1. Hallo!

        Muss mich leider nochmal melden. Momentan sortiert der absolut wahllos.

        Nach einer Sortierung sieht mein Array so aus:
        maxwell.jpg
        Facharbeit_Robert_DeutschLK.zip
        igel1a.jpg
        f-arb_Duke_Roboter.zip
        Bio-Ethik.zip
        f-arb_max_mediapark.zip
        Maxwell!!!.jpg
        Facharbeit Corinna.zip
        affe4.JPG
        armer robert.JPG
        chill_clan.jpg
        Laura, Franzi und ich!!!.jpg
        avatar_jhoo.jpg
        f-arb_Mo_Fauststoff.zip
        freund54.jpg
        mathe_funkionen.zip
        P1000228.jpg
        sponge.JPG

        Ich erkenne da absolut kein System. Fehler werden auch keine ausgegeben. Sortiert hat der also.

        Hintergrund: Ich lese aus einem Verzeichnis alle Dateien aus und möchte diese in alph. Reihenfolge ausgeben. Leider kommt da obiges Ergebnis raus.

        Die entsprechende Code-Stelle wäre:

        //Dateinamen aus Verzeichnis in Array schreiben
         while($inhalt = readdir($verz))
          {
           if($inhalt != "." && $inhalt != ".." && strpos($inhalt,".") != false && $inhalt != "404.jpg" && $inhalt != ".htaccess")
            {
             $array_dateien[] = $inhalt;
            }
          }

        natcasesort($array_dateien); //Array alph. sortieren

        for($u=0; $u<count($array_dateien); $u++)
          { echo "<br>" . $array_dateien[$u]; }

        Wo ist der Fehler? Oder ist das ein Bug?

        Danke schonmal!

        gruß

        Mastershrimp

        1. Hi Mastershrimp,

          Ich habe das jetzt gerade auch einmal getestet.

          ============== Script ================
          //Angenommen wir habe ein Array:
          $data = array("thomas","Thorsten","Dennis","susanne","Sabine","Susanne","Alef","alex","keine

          //Wenn wir darauf jetzt die Sortierung anwenden:
          natcasesort($data);

          //Und jetzt das Array mit einer Forschleife ausgeben
          for($x=0;$x<count($data);$x++) echo $data[$x];

          //erhalten wir diese willkürliche Ausgabe,
          //welche aber in Wirklichkeit der Eingabe entspricht!

          //Wenn wir doch jetzt print_r() anwenden:
          echo "<pre>";
          print_r($data);
          echo "</pre>";

          //kriegen wir das Array genauso ausgeben, wie gewünscht
          ============ /script =================

          Du siehst also, dass die funktion nicht ohne Wirkung geblieben ist.
          Weiter weiß ich jetzt aber leider auch nicht mehr :-(

          Aber es sind sicherlich noch genung Leute da, die dir weiterhelfen können.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:| mo:) zu:|
          Zufällige Hinweise:
          Sinnvolles Zitieren: Man zitiert nur Teilstze des Vorposters
          auf die man sich bezieht! Nicht einfach alles.
          1. Hmm. Danke schonmal. print_r bringt mir glaub ich in dem Fall nichts, weil ich später noch mit den Array-Elementen diverse Sachen machen muss.

            SelfPHP behauptet ja, dass die geordnete Ausgabe wie folgt aussähe:
             Array ( [0] => PHP2 [1] => PHP3 [2] => PHP4 [3] => PHP10 )

            Und wenn ich die per for()-Schleife ausgeben würde, käme ich ja auch zum gewünschten Ergebnis.

            Irgendwie ist SelfPHP generell etwas "arm" im Vergleich zu SelfHTML. Man kann es allenfalls als Funktionsreferenz benutzen...

            Ich such mal im offiziellen PHP Manual nach der Funktion. Vielleicht sagen die noch was anderes.

            Würde mich dennoch über weitere Tipps freuen!

            Danke dir schonmal bis hierhin!

            Chapeau! ;)

            Mastershrimp

            --
            Kämpft für die Rettung von dem Genitiv!
            1. Habs herausgefunden! SelfPHP hat Mist erzählt. Die Funktion sortiert zwar einen Array, lässt aber die Nummerierung bestehen, sodass man bei for() immer noch die alte Reihenfolge ausgibt.

              In den Comments stand dann folgender Hinweis, der das Problem löste:

              Something that should probably be documented is the fact that both natsort and natcasesort maintain the key-value associations of the array. If you natsort a numerically indexed array, a for loop will not produce the sorted order; a foreach loop, however, will produce the sorted order, but the indices won't be in numeric order. If you want natsort and natcasesort to break the key-value associations, just use array_values on the sorted array, like so:

              natcasesort($arr);
              $arr = array_values($arr);

              Danke an alle, die sich die Mühe gemacht haben, mir zu helfen!

              1. Hi Mastershrimp,

                Habs herausgefunden! SelfPHP hat Mist erzählt. Die Funktion sortiert zwar einen Array, lässt aber die Nummerierung bestehen, sodass man bei for() immer noch die alte Reihenfolge ausgibt.

                Genau das war es ja, was ich meinte und was ich dir mit print_r() zeigen wollte.
                Nur wusste ich nicht, wie man die Nummern ändern kann.

                In den Comments stand dann folgender Hinweis, der das Problem löste:

                Something that should probably be documented is the fact that both natsort and natcasesort maintain the key-value associations of the array. If you natsort a numerically indexed array, a for loop will not produce the sorted order; a foreach loop, however, will produce the sorted order, but the indices won't be in numeric order. If you want natsort and natcasesort to break the key-value associations, just use array_values on the sorted array, like so:

                natcasesort($arr);
                $arr = array_values($arr);

                Also der Befehlt array_values() vergibt die Nummern in Array neu in der aktuellen Reihenfolge?

                Danke an alle, die sich die Mühe gemacht haben, mir zu helfen!

                Waren ja verdammt viele ;-)

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                Zufällige Hinweise:
                Probleme mit Formularen?
                http://tutorial.riehle-web.com hilft weiter.
                1. Hi Dennis,

                  Also der Befehlt array_values() vergibt die Nummern in Array neu in der aktuellen Reihenfolge?

                  Genauso ist es, wichtig ist jedoch, dass array_value() nicht im OriginalArray arbeitet, sondern ein neues Array zurückliefert und man somit schreiben muss:

                  $neues_array = array_values($altes_array);

                  Im Gegensatz zu sort().

                  MfG, Dennis.

                  --
                  Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                  Zufällige Hinweise:
                  Meine Homepage: http://www.riehle-web.com
                  Tutorial: http://tutorial.riehle-web.com