ksort verschluckt doppelte Datensätze



  • Hallo zusammen,

    ich hab zur Zeit ein Problem welches ich gerne ohne großen Aufwand lösen wollen würde. Ich habe folgendes Array:

    // print_r
    Array (  
             Array( [Index] => 70 [Nummer] => 01 [Fach] => 3),
             Array( [Index] => 10 [Nummer] => 02 [Fach] => 4),
             Array( [Index] => 50 [Nummer] => 01 [Fach] => 2),
          )
    

    Man erkennt dass die Keys "Nummer" in Array 1 und Array 3 identisch sind. Mache ich jetzt ein ksort auf das gesamte Array so erhalte ich folgende Ausgabe:

    // print_r
    Array (  
             Array( [Index] => 10 [Nummer] => 02 [Fach] => 4),
             Array( [Index] => 70 [Nummer] => 01 [Fach] => 3),
          )
    

    Array 3 ist also gänzlich verschlungen wurde. Allerdings ist das bei meinem Vorhaben ungünstig. Kennt jemand eine simple Lösung für das Problem?

    P.S. selbst ksort(array, SORT_STRING) hat keine Besserung gebracht...


  • Mod

    ksort macht hier keinen Sinn.

    Was willst du denn machen? Ein Sort und den key zu behalten bringt dir hier ja garnix. Denn wozu ist die Assoziation 0 => Array( [Index] => 70 [Nummer] => 01 [Fach] => 3) relevant? bzw, selbst wenn bräuchtest du ja uksort.

    Prinzipiell sieht es für mich so aus, als ob du usort brauchst. Aber beschreib mal was du überhaupt erreichen willst.



  • Es hat sich wie gesagt schon erledigt 🙂

    Aber gut: Ich wollte eine assoziatives Array nach einem seiner Keys sortieren. Das Array sieht so aus:

    $Array[$dynamisch]['statisch']['foobar']      = $count;
    $Array[$dynamisch]['statisch']['foobarRockt'] = $value;
    $Array[$dynamisch]['statisch']['foobarGeht']  = $blablubb;
    

    Mein falscher Ansatz war, dass ich nach $count (was vorher $dynamisch) war sortieren wollte. Dann hab ich den vermeintlich falschen Ansatz erkannt und den Key dynamischdervorhereinValue(dynamisch der vorher ein Value (count) wahr eben als solchen (Key) verwendet.
    ksort war nun in der Lage dazu dass Array anständig zu sortieren. Allerdings hab ich nicht beachtet dass $dynamisch mehrfach vorkommen kann -.- .... Also hab ich $dynamisch um $count erweitert und nun klappt alles so wie ich es will 🙂

    $Array[$dynamisch.$count]['statisch']['foobar']      = $count;
    $Array[$dynamisch.$count]['statisch']['foobarRockt'] = $value;
    $Array[$dynamisch.$count]['statisch']['foobarGeht']  = $blablubb;
    $count++;
    

    Im Nachhinein betrachtet wäre usort der richtige Tipp für Plan 1 gewesen, aber ich denke dass Plan 2 genauso richtig und nicht weniger performant ist. Zumal ich nun auch einen eindeutigen Identifier der Arrays habe (sind ja mehrere Kleine in einem Großen)

    "statisch" bildet übrigens Gruppierungen ab (bevor die Frage kommt) .. so könnte man "statisch" zum Beispiel als Gruppe "Artikel" oder "Eigenschaft" ansehen. Der Schlüssel ist also nicht überflüssig sondern macht im speziellen Fall durchaus Sinn 🙂

    VlG


Anmelden zum Antworten