Array aufteilen (anhand Wert im Array)

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

  • Array aufteilen (anhand Wert im Array)

    Morgen Leute!

    Ich bin auf der Suche nach einer Funktion/Befehl/wasauchimmer, mit der ich ein mehrdimensionales Array anhand eines Wertes innerhalb dieses Arrays in mehrere kleinere Arrays zerlegen kann.
    Hintergrund: ich habe ein Bundesliga-Tippspiel, bei dem ich die Spielpaarungen aus der DB auslese und eben in ein Array packe. Dieses array mit dann 306 Schlüsseln (34 Spieltage x 9 Spielpaarungen) möchte ich nun in kleinere Arrays bzw. in ein mehrdimensionales Array aufteilen, sodass für jeden Spieltag ein Schlüssel angegeben wird (also insgesamt 34 mal).

    Bisher habe ich das mit array_chunk($array, 9) gelöst, aber da ich diese Vorgehensweise auch gerne bei anderen Arrays anwenden möchte (bisher hab ich mit viel zu vielen MySQL-Queries gearbeitet, das will ich ändern), würde ich gerne wissen, ob das möglich ist.

    Im PHP-Manual hab ich mir schon die Array-Funktionen angeguckt, aber entweder bin ich zu blöd (gut möglich), oder dort gibt es wirklich nichts. Entsprechendes gilt für das Forum hier.

    Alternativ wäre eine MySQL-Abfrage, die dieses Array gleich so zurechtrückt, natürlich auch gerne gesehen. GROUP BY habe ich bereits probiert, liefert aber nicht das gewünschte Ergebnis (was ja auch logisch ist).
    An sich wäre ein MySQL-Statement in meinen Augen sogar die "schönere" Lösung, aber ich bin mir nicht sicher, ob das dort überhaupt geht (deswegen auch eine PHP-Frage ).

    Hier der relevante (gekürzte) Code:

    PHP-Code:
    // Spielpaarungen auslesen
    $result_spieltage mysql_query("
                        SELECT 
                            p.id          AS id,
                            p.tore_heim   AS tore_heim,
                            p.tore_gast   AS tore_gast,
                            p.datum       AS datum,
                            p.spieltag    AS spieltag
                        FROM
                            paarungen AS p
                        WHERE
                            p.spieltag BETWEEN 
    $anfang AND $ende
                        ORDER BY
                            spieltag,
                            datum"
    );

    // Paarungen in Array packen
    while ($spieltage mysql_fetch_array($result_spieltageMYSQL_ASSOC))
     {
         
    $spieltage_arr[] = $spieltage;
     }

    // Array in Array mit je 9 Werten aufsplitten (9 Spiele pro Tag)
    $spieltage_arr_split array_chunk($spieltage_arr9); 

    Das aus der DB ausgelesene Array hat dann folgendes Aussehen:

    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    id] => 1
                
    [tore_heim] => 1
                
    [tore_gast] => 0
                
    [datum] => 2004-08-06
                
    [spieltag] => 1
                
    [name_heim] => Werder Bremen
                
    [name_gast] => FC Schalke 04
            
    )

    [...]

        [
    305] => Array
            (
                [
    id] => 306
                
    [tore_heim] => 
                [
    tore_gast] => 
                [
    datum] => 2005-05-21
                
    [spieltag] => 34
                
    [name_heim] => SC Freiburg
                
    [name_gast] => FC Schalke 04
            
    )



    Und anstatt jetzt eben ein Array mit 306 Schlüsseln zu haben, hätte ich gerne eines mit 34 bzw. eben mehrere mit den Paarungen des jeweiligen Spieltags

    Mit array_chunk() funktioniert es wie gesagt, allerdings stört mich da, dass ich einen festen Wert (9) eingeben muss, der bei anderen Arrays durchaus dynamisch sein kann.

    Das gesplittete Array sieht dann so aus:

    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => Array
                    (
                        [
    id] => 1
                        
    [tore_heim] => 1
                        
    [tore_gast] => 0
                        
    [datum] => 2004-08-06
                        
    [spieltag] => 1
                        
    [name_heim] => Werder Bremen
                        
    [name_gast] => FC Schalke 04
                    
    )
                 
                 [...]
             }
         
         [...]
         
         [
    33] => Array
            (
                [...]
                
                [
    8] => Array
                    (
                        [
    id] => 306
                        
    [tore_heim] => 
                        [
    tore_gast] => 
                        [
    datum] => 2005-05-21
                        
    [spieltag] => 34
                        
    [name_heim] => SC Freiburg
                        
    [name_gast] => FC Schalke 04
                    
    )

            )


    Hoffe um Hilfe
    Zuletzt geändert von sp00n; 04.01.2005, 19:08.

  • #2
    würde gehen, wenn auch umständlich.
    aber wäre es nicht einfacher, die sql-abfrage so zu ändern, dass du nur die 9 bzw 34 bzw was auch immer wieviele ergebnisse bekommst?

    wäre evtl. nicht optimal von der leistung her (mehrere ähnliche sql abfragen in einer schleife), aber mit einem riesenarray mittels php zu jonglieren wäre auch nicht die beste lösung.

    Kommentar


    • #3
      ja, so ähnlich hatte ich das bisher.

      eine for schleife, die 34 mal die paarungen aus der DB abfragt.
      und eben das wollte ich umgehen, da das schon ziemlich langsam wurde...

      das php array geht da doch um einiges flotter


      *** edit
      ganz lustig wirds nämlich, wenn ich zu den 34 spieltage á 9 paarungen noch die tipps und punkte der tipper darstellen lasse.
      da hab ich bisher 34 mal die sql-abfrage nach den paarungen, dann noch für jede paarung für jeden spieltag eine sql-abfrage mit den tipps und dann nochmal eine sql-abfrage für die gesamtpunktzahl.
      definitiv zu viel, und da habe ich gehofft, das mit so einer funktion erheblich optimieren zu können

      meine vision ist halt (man muss sich ja ziele setzen ):
      eine sql abfrage für die paarungen
      eine sql abfrage für die tipps
      das ganze zusammenwurschteln
      und fertig ist meine wunderbar schnelle ausgabe
      Zuletzt geändert von sp00n; 04.01.2005, 19:58.

      Kommentar


      • #4
        hm, hat jemand ne idee?

        hab mir gestern den kopf zermartert, als ich ein array (bin jetzt bei den tipps...) nach einem bestimmten wert im array aufteilen wollte

        Kommentar


        • #5
          ein mehrdimensionales Array anhand eines Wertes innerhalb dieses Arrays in mehrere kleinere Arrays zerlegen
          hm.. wie bereits gesagt - gehn würd's bestimmt - man muss sich eben nur eine schöne schleife überlegen, die das array durchgeht und die werte in ein neues array schreibt - bis eben irgend eine bedingung zutrifft. trotzdem frage ich mich, was das bringen soll - ein mehrdimensionales array ist imho das gleiche, wie mehrere wenigerdimensionale™ arrays, nur dass du diese kleinen arrays als element des großen ansprichst.

          PHP-Code:
          //beispiel:
          $arr = array(
              
          "eins" => array(0,1,2,3),
              
          "zwei" => array(0,1,2,3),
              
          "drei" => array(0,1,2,3)
          ); 
          wozu unbedingt $eins[2] oder $drei[1] anstreben, wenn $arr["eins"][2] für jede automatisation geeigneter wäre?

          Kommentar


          • #6
            alles klar, ich hab das jetzt anders gelöst, indem ich das array gleich so schreiben ließ, wie ich es gebraucht hab.
            war zu fixiert auf die eine lösung, dass ich das naheliegendste nicht gesehen hab

            thx füt deine mühen, hast mein gehirn aus seiner lethargie gerissen *g*


            falls es noch jemanden interessiert, die schleife sieht jetzt so aus:
            PHP-Code:
            while ($spieltage mysql_fetch_array($result_spieltageMYSQL_ASSOC))
             {
                 
            $spieltage_arr[$spieltage['spieltag']][] = $spieltage;
             } 
            (das ganze hab ich dann auf die tipps übertragen, wo das array dann so generiert wird: $tipps_arr[$tipps['spieltag']][$tipps['paarung_id']][] = $tipps; )


            scheint jetzt problemlos zu funzen, und bedeutend schneller ist es auch.
            kein wunder, da 2 < 34x9x5 mysql-queries

            Kommentar

            Lädt...
            X