Multi Array sortieren (wieder mal)

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

  • Multi Array sortieren (wieder mal)

    Hallöchen liebe Gemeinde,
    ich verbeisse mich (schon wieder ) beim Sortieren eines "Multi-Array,s"

    Array:

    PHP-Code:
    [2012-11-02] => Array (
    [
    0] => Array(
                         [
    sp_1] => Micky1st
                         
    [sp_2] => devil48
                         
    [erg_1] => 3
                         
    [erg_2] => 1
                         
    [zeit] => 20:09:57
                     
    )
    [
    1] => Array (
                         [
    sp_1] => Micky1st
                         
    [sp_2] => billard-lord
                         
    [erg_1] => 3
                         
    [erg_2] => 2
                         
    [zeit] => 20:42:21
                     
    )
    [
    2] => Array (
                         [
    sp_1] => reds1994
                         
    [sp_2] => Micky1st
                         
    [erg_1] => 3
                         
    [erg_2] => 2
                         
    [zeit] => 22:28:36
                     
    )
    [
    3] => Array (
                         [
    sp_1] => Crazy Painter
                         
    [sp_2] => Micky1st
                         
    [erg_1] => 3
                         
    [erg_2] => 1
                         
    [zeit] => 18:01:25
                     
    )
    [
    4] => Array (
                         [
    sp_1] => Aris
                         
    [sp_2] => PekingPeter
                         
    [erg_1] => 3
                         
    [erg_2] => 1
                         
    [zeit] => 19:19:44
                     
    )
              )
    [
    2012-11-03] => Array (
    [
    0] => Array ( 
                        [
    sp_1] => Homer85
                         
    [sp_2] => devil48
                         
    [erg_1] => 3
                         
    [erg_2] => 1
                         
    [zeit] => 19:00:44
                     
    )
    [
    1] => Array (
                         [
    sp_1] => Micky1st
                         
    [sp_2] => Aris
                         
    [erg_1] => 3
                         
    [erg_2] => 1
                         
    [zeit] => 21:19:01
                     
    )
    [
    2] => Array (
                         [
    sp_1] => Reimarus
                         
    [sp_2] => reds1994
                         
    [erg_1] => 3
                         
    [erg_2] => 2
                         
    [zeit] => 10:36:35
                     

             ) 

    //usw 
    Nun möchte ich Inhalt der Datums-Key,s-Arrays nach der Zeit aufsteigen sortieren.

    Habe es mit uasort, usort und array_multisort 5 Stunden erfolglos versucht.

    Ich hab ähnliche Situationen schön gelöst, aber nun würde ich mich über einen Schubser
    in die richtige Richtung freuen.

    Danke und Gruss
    Wasser Wanderer

  • #2
    Um nach dem Datum zu sortieren wäre ksort, bzw uksort angesagt.
    Für die 2te Ebene (Zeit) würde ich dann usort oder uasort verwenden.

    Kommen die Daten aus der DB?
    Dann lass die DB sortieren.
    Zuletzt geändert von combie; 08.12.2012, 10:04.
    Wir werden alle sterben

    Kommentar


    • #3
      Guten Morgen combie,
      Nach Datums-Key ist es schon sortiert.

      Die Daten kommen (leider) nicht aus einer DB

      Ich hatte es für die 2te Ebene (zeit) schon so (erfolglos) versucht:

      PHP-Code:
      function cmp_by_spalte_numerisch($spalte$sortierrichtung SORT_ASC)
        {
               
      $richtung SORT_ASC === $sortierrichtung?1:-1
               return function (
      $a,$b) use ($spalte,$richtung)
                      {     
                            return (
      $a[$spalte] - $b[$spalte]) * $richtung;
                      };   
        }
         
      uasort($array,cmp_by_spalte_numerisch('zeit',SORT_ASC)); 
      Ich glaub die Funktion hatte ich von dir Combie

      Kommentar


      • #4
        Ja, sieht so aus.
        Aber.... das ist nicht für diese Struktur gefertigt.

        Du solltest das Array in der ersten Dimension mit array_map, array_walk oder foreach durchlaufen. Und dann die 2te Dimension mit usort, oder was auch immer sortieren.

        Aber sagte ich das nicht schon?
        Wir werden alle sterben

        Kommentar


        • #5
          Zitat von combie Beitrag anzeigen
          Ja, sieht so aus.
          Aber.... das ist nicht für diese Struktur gefertigt.

          Du solltest das Array in der ersten Dimension mit array_map, array_walk oder foreach durchlaufen. Und dann die 2te Dimension mit usort, oder was auch immer sortieren.

          Aber sagte ich das nicht schon?
          Das werd ich nachher mal machen und dann berichten.

          Ich werde erstmal Glühwein aufm Weihnachstmakrt vernichten, und danach kann ich bestimmt besser denken

          Kommentar


          • #6
            Tipp:
            Wenn du die Testdaten mit <pre> formatieren und mit var_export() ausgeben würdest, dann könnte das auch jeder testen, ganz ohne Abtipporgie.
            Wir werden alle sterben

            Kommentar


            • #7
              Zitat von combie Beitrag anzeigen
              Tipp:
              Wenn du die Testdaten mit <pre> formatieren und mit var_export() ausgeben würdest, dann könnte das auch jeder testen, ganz ohne Abtipporgie.
              Hallöchen combie,
              das würde ich gerne machen, aber wenn ich das aus dem Browser kopiere und
              hier einfüge, dann hab ich in der Vorschau hier, unzählige an TAB,s drinne.

              Das wieder zusammen zu friemeln, dauert ewig. Oder gibt es da noch einen anderen Tipp?

              P.S. Glühwein war lecker und ich kann dennoch nicht besser denken

              Kommentar


              • #8
                Ich habe mal mein bisheriges "Machwerk" hier: http://billard-turniere.bplaced.net/...uppenbruch.php

                inklusive formartierter Array-Ausgabe hochgeladen.



                Zuerst seht ihr eine Tabelle die nach Datum sortiert, danach nach Begegnungen sortiert ist.

                Ich schaffe es nicht (ob mit oder ohne Glühwein), innerhalb des Datums dann nach Uhrzeit aufsteigend zu sortieren.

                Kommentar


                • #9
                  Ich schaffe es nicht (ob mit oder ohne Glühwein), innerhalb des Datums dann nach Uhrzeit aufsteigend zu sortieren.
                  Dann zeige doch mal was du falsch machst.

                  Wie gesagt, diese Funktion von mir ist nicht optimal, denn sie sortiert numerisch. Das führt spätestens nach dem Doppelpunkt in der Zeit zu Sorgen.
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Hallöchen combie,

                    Zitat von combie Beitrag anzeigen
                    Dann zeige doch mal was du falsch machst.

                    Wie gesagt, diese Funktion von mir ist nicht optimal, denn sie sortiert numerisch. Das führt spätestens nach dem Doppelpunkt in der Zeit zu Sorgen.
                    Ich habe das Array nun neu indiziert:
                    Erste Ebene: [datum]
                    Zweite Ebene: [k_zeit] (hier hatte ich in der Zeit die Doppelpunkte entfernt. Auch die Zeit ist unique in der 2ten Ebene)
                    innerhalb der zweiten Ebene:
                    sp_1 => bla
                    sp_2 => blubb
                    erg_1 => 3
                    erg_2 => x
                    zeit => 18:05:02 (bsp)

                    mit ksort($array) , kriege ich das Datum ASC sortiert

                    Mit der Funktion:
                    PHP-Code:
                    function sortieren($a$b)
                    {

                        
                    /*echo "Comparing ".print_r($a,true).
                               " to ".print_r($b,true)."<br />";*/
                        //equal -> return 0
                        
                    if ($a == $b) return 0;
                        
                    //lowwest income at first
                        
                    if ($a $b) return 1;
                        
                    //highest income last
                        
                    return -1;
                    }; 
                    und dann:
                    PHP-Code:
                    uasort($array,'sortieren'); 
                    oder:
                    PHP-Code:
                    uasort($new_array[$datum][$k_zeit],'sortieren'); 
                    klappt es nicht dann nach Zeit ASC zu sortieren..

                    Ich habe die Ausgabe des <pre>-formartierten Array,s angepasst.
                    Siehe obigen link. Die HTML-Ausgabe darüber ist erstmal zu vernachlässigen, da ich mich sowieso heillos verzettelt habe

                    Kommentar


                    • #11
                      PHP-Code:
                      $sortcallback = function($a$b
                                  {
                                            return 
                      strtotime($a['zeit']) - strtotime($b['zeit']);
                                  };
                                               
                      $walkcallback = function(&$subarray) use ($sortcallback)
                              {
                                 
                      usort($subarray,$sortcallback);
                              };

                      array_walk($deinarray,$walkcallback); 
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        combie du bist mein Held

                        Dein Ergebnis ist hier zu sehen: http://billard-turniere.bplaced.net/...uppenbruch.php

                        Da noch Weihnachtsmärkte sind, hoffe ich das ich dich mal unter einem
                        Glühweinstand antreffe. Dann trinken wir mal was zusammen

                        Kommentar


                        • #13
                          Ja, schön...
                          Mir wäre lieber gewesen, du wärst selber auf eine Lösung gekommen.
                          Haste denn so was gelernt?
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Hallo Combie,

                            Zitat von combie Beitrag anzeigen
                            Mir wäre lieber gewesen, du wärst selber auf eine Lösung gekommen.
                            Ja. Das wäre mir auch lieber gewesen.

                            Haste denn so was gelernt?
                            Um offen zu sein: Leider nicht.

                            Aber ich werde mich mit deiner Funktion ausgiebig auseinander setzen,
                            um was zu lernen.

                            Ich habe erst (auf den Monat genau) vor 2 Jahren begonnen, mich mit PHP
                            zu beschäftigen.
                            Vieles war learning by doing und einem PHP-Buch.

                            Manches hab ich hier in diesem Forum gelernt, bzw von einer Person die auch etwas Ahnung hatte.

                            Nunja, mit Ende 40 (mein Alter) habe ich für mich leider feststellen müssen, das das Lernen langsamer voran geht.

                            Aber ich hab Freude an PHP und an den Lösungen die ich damit schaffen kann. (natürlich lieber selber )

                            Kommentar

                            Lädt...
                            X