Array sortieren (nicht trivial)

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

  • Array sortieren (nicht trivial)

    Hallo,

    ich habe ein Problem mit dem Sortieren von Arrays.
    Ich habe ein Array ($users), welches fuer jeden User ein weiteres Array mit bestimmten Daten der User enthaelt.

    Hier ein Beispiel:

    PHP-Code:
    $users =

    Array
    (
        [
    u53] => Array
            (
                [
    0] => u53
                
    [1] => username abc
                
    [2] => T
                
    [3] => -1
                
    [4] => Hans Meier
                
    [5] => [email]aaa@email.com[/email]
                [
    6] => HM
                
    [7] => admin
            
    )

        [
    u23] => Array
            (
                [
    0] => u23
                
    [1] => username xyz
                
    [2] => F
                
    [3] => -1
                
    [4] => Peter Mueller
                
    [5] => [email]BBB@email.com[/email]
                [
    6] => PM
                
    [7] => user
            
    )

        [
    u44] => Array
            (
                [
    0] => u44
                
    [1] => username def
                
    [2] => F
                
    [3] => 1262332800
                
    [4] => Administrator
                
    [5] => [email]ccc@email.com[/email]
                [
    6] => A
                
    [7] => admin
            
    )


        ...
        ...
        ...
        

    Die Daten der User sollen in einer Tabelle ausgegeben werden. Jede Spalte soll in auf- und absteigender Reihenfolge, sortierbar sein. Ich habe mich auf php.net umgeschaut und folgene Funktion gefunden (hier: http://us3.php.net/manual/de/functio...multisort.php), die bis auf eine Kleinigkeit einwandfrei funktioniert:

    PHP-Code:
    function UsersArraySort()
    {
        
    $n func_num_args();
        
    $ar func_get_arg($n-1);
        if(!
    is_array($ar)) {
            return 
    false;
        }
        for(
    $i 0$i $n-1$i++) {
            
    $col[$i] = func_get_arg($i);
        }
        foreach(
    $ar as $key => $val) {
            foreach(
    $col as $kkey => $vval) {
                if(
    is_string($vval)) {
                    ${
    "subar$kkey"}[$key] = $val[$vval];
                }
            }
        }
        
    $arv = array();
        foreach(
    $col as $key => $val) {
            
    $arv[] = (is_string($val) ? ${"subar$key"} : $val);
        }
        
    $arv[] = $ar;
        
    call_user_func_array("array_multisort"$arv);
        return 
    $ar;


    Wenn ich die Funktion folgendermassen aufrufe, sortiert sie mein $users-Array nach den Werten des 5. Elements (hier E-Mail), aufsteigend, wendet die "Stringsortiermethode" an und schreibt das Ergebnis wieder in $users.


    PHP-Code:
    $users localUsersArraySort("5"SORT_ASCSORT_STRING$users); 
    Soweit, so gut. Das einzige Problem: Die Funktion sortiert zuerst nach Grossbuchstaben A-Z und dann nach Kleinbuchstaben a-z. Das heisst im obigen Beispiel ist die Reihenfolge nicht:

    1. AAA@email.com
    2. bbb@email.com
    3. CCC@email.com

    sondern:

    1. AAA@email.com
    2. CCC@email.com
    3. bbb@email.com

    Auf der oben genannten Seite ist ein Beispiel genannt, wie man eine Groß-/Kleinschreibung nicht beachtende Sortierung hinbekommen kann, allerdings schaffe ich es nicht, das in meine Funktion einzubauen.

    Hat jemand eine Idee, wie ich dieses Problem vermeiden kann? Oder kennt jemand eine andere Funktion, mit der ich mein Users-Array sortieren kann, ohne das die Gross- und Kleinschreibung beachtet wird?

    Gruss,
    Markus

  • #2
    Diese Funktion von MrHapiness hat mir damals sehr geholfen als ich ein ähnliches Problem hatte:

    http://www.php-resource.de/forum/sho...ight=multisort

    Kommentar


    • #3
      Original geschrieben von prego
      Diese Funktion von MrHapiness hat mir damals sehr geholfen als ich ein ähnliches Problem hatte:

      http://www.php-resource.de/forum/sho...ight=multisort
      Vielen Dank fuer den Tipp, aber leider macht die von dir erwaehnte Funktion, wie die von mir verwendete. Sie sortiert zuerst nach Grossbuchstaben A-Z und dann nach Kleinbuchstaben a-z. Ich brauche aber eine Funktion, die Gross-/Kleinschreibung NICHT beachtet.

      Andere Ideen?

      Danke,
      Markus

      Kommentar


      • #4
        Dann les mal hier Beispiel 4. und Änder die Funktion von MrHapiness entsprechend ab....

        Nur so als Idee

        Kommentar


        • #5
          Original geschrieben von prego
          Dann les mal hier Beispiel 4. und Änder die Funktion von MrHapiness entsprechend ab....
          Vom Beispiel 4 habe ich ja schon geschrieben. Ich schaffe es nicht, dieses Beispiel bei meiner Funktion einzubauen, da ich im obersten Array keine Werte, sondern weitere Arrays habe...

          Kommentar


          • #6
            Ich rede ja auch davon die Funktion von MrHapiness anzupassen

            Aber beschreib doch einfach mal dien konkretes Problem...

            Kommentar

            Lädt...
            X