[Funktion] Array sortieren

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

  • [Funktion] Array sortieren

    Hallo.

    Vielleicht kommt euch folgende Funktion bekannt vor:

    PHP-Code:
    <?php
    function TeamsArraySort()
    {
        
    $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;
    }
    ?>
    Seid ich auf PHP5 geuüpdatet habe, funktioniert das nicht mehr.

    Hat einer ne Ahnung, woran das liegen könnte?
    Gibt keinen Fehler, aber es wird nix sortiert.
    Zuletzt geändert von southdevils; 08.03.2007, 22:29.

  • #2
    php-tags richtig einsetzen, code schön formatieren?

    Kommentar


    • #3
      OK

      Kommentar


      • #4
        wozu eigentlich so ne abgefahrene funktion?
        was bedeutet "funktioniert nicht"?
        wie wird sie aufgerufen?
        error_reporting an?

        Kommentar


        • #5
          Re: [Funktion] Array sortieren

          PHP-Code:
          ${"subar$kkey"
          ich kann echt nicht verstehen, wieso du sowas machst...

          Du solltest auch in den zwei foreach diese komische variable erstmal als array deklarieren.

          auch wenn da jetzt wohl der fehler nicht liegt, solltest du dir solch ein schmuddelkrams abgewöhnen und das ganz fix vernünftig programmieren!

          Kommentar


          • #6
            Re: [Funktion] Array sortieren

            OffTopic:
            omfg!! -.-
            Original geschrieben von southdevils
            Seid ich auf PHP5 geuüpdatet habe, funktioniert das nicht mehr.
            seitseid.de

            Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

            Kommentar


            • #7
              Hallo.

              Ich hab das auch nur mal von jemandem bekommen, weil ich mich damit nicht so auskenne und noch PHP-Anfänger bin.

              Es geht einfach darum, dass ich eine Bundesliga-Tabelle machen muss, die auf der Basis der Spieltage angezeit werden soll.

              Bisher erzeuge ich ein Array mit den 18 Teams:

              PHP-Code:
              while ($row mysql_fetch_array($result8))
                      {
                          
                          
              $array = array($row['Heim_Team'] => array("Platz" => 0,
                                                                  
              "Heimpunkte" => 0,
                                                                  
              "Heimsiege" => 0,
                                                                  
              "Heimunentschieden" => 0,
                                                                  
              "Heimniederlagen" => 0,
                                                                  
              "Heimtore" => 0,
                                                                  
              "Heimgegentore" => 0,
                                                                  
              "Auswärtssiege" => 0,
                                                                  
              "Auswärtsunentschieden" => 0,
                                                                  
              "Auswärtsniederlagen" => 0,
                                                                  
              "Auswärtstore" => 0,
                                                                   
              "Auswärtsgegentore" => 0,
                                                                  
              "Auswärtspunkte" => 0,
                                                                  
              "Gesamtpunkte" => 0,
                                                                  
              "Tordifferenz" => 0,
                                                                  
              "Toregesamt" => 0,
                                                                  )
                                         );
                      } 

              Danach werden etliche Berechnungen gemacht, um die Siege, Tore, Punkte etc. zu berechnen und dann wird das alles in das Array geschrieben:

              PHP-Code:

              $array
              [$TEAMNAME]["Heimpunkte"] = $heimpunkte;
                      
              $array[$TEAMNAME]["Heimsiege"] = $heimS;
                      
              $array[$TEAMNAME]["Heimunentschieden"] = $heimU;
                      
              $array[$TEAMNAME]["Heimniederlagen"] = $heimN;
                      
              $array[$TEAMNAME]["Heimtore"] = $heimtore;
                      
              $array[$TEAMNAME]["Heimgegentore"] = $heimgegentore;
                      
              $array[$TEAMNAME]["Auswärtssiege"] = $auswS;
                      
              $array[$TEAMNAME]["Auswärtsunentschieden"] = $auswU;
                      
              $array[$TEAMNAME]["Auswärtsniederlagen"] = $auswN;
                      
              $array[$TEAMNAME]["Auswärtstore"] = $auswtore;
                      
              $array[$TEAMNAME]["Auswärtsgegentore"] = $auswgegentore;
                      
              $array[$TEAMNAME]["Auswärtspunkte"] = $auswpunkte;
                      
              $array[$TEAMNAME]["Gesamtpunkte"] = $auswpunkte $heimpunkte $Abzug;
                      
              $array[$TEAMNAME]["Tordifferenz"] = ($heimtore $auswtore)-($heimgegentore $auswgegentore);
                      
              $array[$TEAMNAME]["Toregesamt"] = ($heimtore $auswtore); 
              Dann rufe ich die Funktion auf:

              PHP-Code:

              $array 
              TeamsArraySort("Gesamtpunkte"SORT_DESCSORT_NUMERIC"Tordifferenz"SORT_DESCSORT_NUMERIC"Tordifferenz"SORT_DESCSORT_NUMERIC$array); 
              Die Werte im Array sind alle korrekt, nur die Sortierung funktioniert nicht.
              Das Array ist so sortiert, wie es weiter oben zugeordnet wird.
              Und auch nur unter PHP5. Bei der 4er_version läuft das perfekt.

              Sollte jemand ne bessere Idee haben, dann nur her damit.
              Wäre euch super dankbar ...

              Kommentar


              • #8
                nein, es ist schon viel früher "inkorrekt".
                die while schleife überschreibt dir 18 mal die variable $array.
                schau mal mit print_r da rein. soll das so sein?
                an jeder stelle, bis kurz vor der sortierung?

                Kommentar


                • #9
                  Das ist schon richtig so.

                  Dieses 'Heim_Team' ist ja der Teamname eines der 18 Teams.
                  Das ist ja ein mehrdinensionales Array.
                  Ein Array für jedes Team mit dessen Werten in dem Array von TEams.

                  Die Tabelle an sich ist ja auch korrekt. Alle Werte stimmen. DIe sind nur unsortiert...

                  Kommentar


                  • #10
                    verstehe ich nicht. $array = array(...) wird einfach 18 mal hintereinander ausgeführt. warum sortierst du eigentlich nicht mithilfe der datenbank? die können das ganz gut!

                    Kommentar


                    • #11
                      Dann müsste ich das doch alles irgendwo in eine temporäre Tabelle speichern, weil die Tabelle ja erst beim Aufruf berechnet wird.
                      Und da ich nicht in jeder Saison die gleiche Anzahl von Teams habe, hab ich das so gemacht.

                      PS: Das da oben ist nur die Initialisierung, die ich am Anfang gemacht habe um alle Werte auf 0 zu setzen.

                      Dann steht in dem Array halt

                      team1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                      team2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                      team3, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

                      usw...
                      Zuletzt geändert von southdevils; 09.03.2007, 14:21.

                      Kommentar


                      • #12
                        nein, müsstest du nicht, schließlich errechnest du tordifferenz u.a. sortierrelevante spalten aus den werten anderer spalten.

                        "deine" selbstgemachte lösung macht ja auch nichts anderes als array_multisort anwenden. nur ist es nicht sinnvoll, unsortierte daten anzufordern und sie anschließend zu sortieren.

                        informiere dich über sql where-statement und verlege die sortierung auf die db.

                        Kommentar


                        • #13
                          Ich hatte es mal urspünglich probiert per SQL, aber wieder aufgegeben, weil ich das nicht hinbekommen habe, die ganzen Felder alle mit einer Abfrage zu berechnen.

                          Kommentar


                          • #14
                            Ich hatte es mal urspünglich probiert per SQL, aber wieder aufgegeben, weil ich das nicht hinbekommen habe, die ganzen Felder alle mit einer Abfrage zu berechnen.
                            na dann würde ich vorschlagen wir schauen uns mal deinen versuch an und überarbeiten den dann (komplett)
                            tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
                            documentation: php.net mysql.com framework.zend.com

                            Die Nachtwache!

                            Kommentar


                            • #15
                              na gut.

                              Ich hab das zwar nicht mehr aufgehoben, was ich da letztes Jahr probiert habe, aber ich kann ja am Wochenende mal alle Infos zusammensuchen, die ich noch habe.
                              Also DB-Struktur der Daten, das gesamte Skript usw....

                              Kommentar

                              Lädt...
                              X