lu: multidimensionales Array sortieren ...

Hallo,

ich komme leider auf keine Lösung ... Hat jemend eine Idee?

Ich möchte das wie folgt aufgebaute Array umsortieren:

Array
(
    [kunde-name-1] => Array
        (
            [2012] => Array
                (
                    [0] => 4
                )

[2013] => Array
                (
                    [0] => 3
                    [1] => 1
                    [2] => 2
                    [3] => 4
                )
        )
    [kunde-name-2] => Array
        ( ... )
)

Und zwar so, dass die Jahre absteigend (2013, 2012) und die Quartale aufsteigend (1, 2, 3, 4) sortiert sind. (Die Keys der Quartale sind egal.) Das Ergebnis soll also so aussehen:

Array
(
    [kunde-name-1] => Array
        (
            [2013] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                )

[2012] => Array
                (
                    [0] => 4
                )

)
    [kunde-name-2] => Array
        ( ... )
)

Besten Dank!

  1. hi,

    Hallo,

    ich komme leider auf keine Lösung ... Hat jemend eine Idee?

    ksort() auf das Array andwenden mit der Option/Flag descending (php.net anschauen).

    dann: foreach ($ksortedArray as $quartalsArray) {
       sort($quartalsarray); //php.net schauen, einfaches arraysortieren
    }

    mfg

    tami

    1. Hallo tami,

      danke für eine Antwort. Aber leider verstehe ich sie nicht ganz ... Ich habe ja 3 Dimensionen in meinem Array. 1. Kunde (Name, Reihenfolge egal), 2. Jahr (soll: absteigend), 3. Quartal (soll: aufsteigend). Ich muss also die 2. bzw. 3. Ebene ansprechen ...

      ksort() auf das Array andwenden mit der Option/Flag descending (php.net anschauen).

      dann: foreach ($ksortedArray as $quartalsArray) {
         sort($quartalsarray); //php.net schauen, einfaches arraysortieren
      }

  2. Tach!

    Ich möchte das wie folgt aufgebaute Array umsortieren:
    Und zwar so, dass die Jahre absteigend (2013, 2012) und die Quartale aufsteigend (1, 2, 3, 4) sortiert sind. (Die Keys der Quartale sind egal.)

    In anderen Worten: Das äußere Array braucht keine Sortierung, die Elemente der ersten Ebene (Kunden sollen so bleiben wie sie sind. Aber für jedes Element sollen die Schlüssel (Jahre) absteigend sortiert werden und die Arrays in deren Werte aufsteigend.

    Wenn man das so formiliert, ergibt sich, dass zuerst mit einem foreach auf das äußere Array die einzelnen Kunden angesprochen werden müssen. Dort wird eine schlüsselbasierte Sortierung benötigt. Dann über die Jahre iterieren und die Quartalswerte sortieren. Weiter mit dem nächsten Kunden.

    dedlfix.

    1. Hallo,

      In anderen Worten: Das äußere Array braucht keine Sortierung, die Elemente der ersten Ebene (Kunden sollen so bleiben wie sie sind. Aber für jedes Element sollen die Schlüssel (Jahre) absteigend sortiert werden und die Arrays in deren Werte aufsteigend.

      Ganz genau :)

      Wenn man das so formiliert, ergibt sich, dass zuerst mit einem foreach auf das äußere Array die einzelnen Kunden angesprochen werden müssen. Dort wird eine schlüsselbasierte Sortierung benötigt. Dann über die Jahre iterieren und die Quartalswerte sortieren. Weiter mit dem nächsten Kunden.

      Danke für die Hilfe zur Selbsthilfe. Aber irgendwie stehe ich auf dem Schlauch ... Eine Codebeispiel wäre toll!

      Wenn ich folgendes versuche, ändert sich an der Reihenfolge nichts:

      foreach ($my_array as $key1 => $value1)
      {
         print_r($value1);
         ksort($value1, SORT_ASC);
         print_r($value1);

      $neu[$key1] = $value1;
         # ...
      }

      1. Tach!

        Wenn ich folgendes versuche, ändert sich an der Reihenfolge nichts:
           ksort($value1, SORT_ASC);

        SORT_ASC ist keine Konstante, die für ksort() von Bedeutung ist. Deren Wert wird missinterpretiert werden, wenn du sie dort anwendest. Bitte konsultiere das Handbuch zur Funktionsweise, wenn du nicht das gewünschte Ergebnis bekommst. Rückwärts sortieren geht mit krsort().

        dedlfix.

        1. Hallo,

          SORT_ASC ist keine Konstante, die für ksort() von Bedeutung ist. Deren Wert wird missinterpretiert werden, wenn du sie dort anwendest. Bitte konsultiere das Handbuch zur Funktionsweise, wenn du nicht das gewünschte Ergebnis bekommst. Rückwärts sortieren geht mit krsort().

          Blink, blink ... Danke, jetzt habe ich es hinbekommen. Hier noch zur Dokumentation für die Nachwelt:

          foreach ($my_array as $key1 => $value1)
          {
             krsort($value1);
             $neu[$key1] = $value1;

          foreach ($value1 as $key2 => $value2)
             {
                rsort($value2);
                $neu[$key1][$key2] = $value2;

          foreach ($value2 as $key3 => $value3)
                {
                   $neu[$key1][$key2][$key3] = $value3;
                }
             }
          }

          et voilà

          Danke und Grüße!

          1. Tach!

            $neu[$key1][$key2] = $value2;

            foreach ($value2 as $key3 => $value3)
                     $neu[$key1][$key2][$key3] = $value3;

            Ist denn dieses (dritte) foreach notwendig? Durch die Zuweisung von $value2 sollten doch auch dessen Anhängsel mit dabei sein.

            dedlfix.

            1. Hallo,

              Ist denn dieses (dritte) foreach notwendig? Durch die Zuweisung von $value2 sollten doch auch dessen Anhängsel mit dabei sein.

              Stimmt, es geht auch ohne :)

              Dank & Gruß.

          2. Tech,

            foreach ($my_array as $key1 => $value1)
            {
               krsort($value1);
               $neu[$key1] = $value1;

            foreach ($value1 as $key2 => $value2)
               {
                  rsort($value2);
                  $neu[$key1][$key2] = $value2;

            foreach ($value2 as $key3 => $value3)
                  {
                     $neu[$key1][$key2][$key3] = $value3;
                  }
               }

            und jeder arme Tropf, der den Code lesen muss, muss sich erstmal Gedanten machen, was denn my_array und key und value überhaupt ist. Besser, man nimmt sprechende Variablen.

              
            foreach($customers as $customerName => $years){  
               // ...  
               foreach($years as $year => $quarters){  
                 // ...  
                 foreach($quarters as $index => $quarter){  
              
                 }  
               }  
            }