Funktion max(): Aufeinmal Fehlerhaft

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Funktion max(): Aufeinmal Fehlerhaft

    Hallöchen liebe Experten,
    diese Funktion:
    PHP Code:
    $last_datum max($name_quote[4]); 
    ging bis vor ca. 3 Wochen einwandfrei.

    Damit ermittele ich den höchsten Unix-Timestamp in meinem Array.

    Merkwürdigerweise bekomme ich seit ca. 3 Wochen nur noch den vorletzten
    Timestamp angezeigt, obwohl ich im Script nichs verändert habe.

    Der Timestamp wird im Array $name_quote fortlaufend angelegt und kann auch mehrfach vorkommen.

    Die Ursprungsdaten sind auch alle korrekt.

    Hat da jemand eine Idee?

  • #2
    Wo sind die Testdaten?
    PHP Code:
    var_export($name_quote[4]) 
    Oder willst du dich hier nur ausheulen?
    Wir werden alle sterben

    Comment


    • #3
      Ausheulen? Gute Idee

      Hier die Testdaten:
      PHP Code:
      DJ Avalon45;DJmünstermaus;0;2;1317327760
      Arwen7614
      ;joggi49;2;0;1317327760
      Sir ConnorMcleod
      ;PekingPeter;2;1;1317327760
      hexenwesen10
      ;DJmünstermaus;2;0;1317327760
      Arwen7614
      ;Sir ConnorMcleod;0;2;1317327760
      DJmünstermaus
      ;Arwen7614;0;2;1317327760
      hexenwesen10
      ;Sir ConnorMcleod;1;2;1317327760
      DJmünstermaus
      ;Snoopyy;2;0;1317594512
      Niam47
      ;ConnorMcleod;1;2;1317594512
      BVB Kid
      ;DJ Avalon45;0;2;1317594512
      ziggi
      ;DJmünstermaus;2;0;1317594512
      ConnorMcleod
      ;DJ Avalon45;2;0;1317594512
      DJmünstermaus
      ;DJ Avalon45;1;2;1317594512
      ziggi
      ;ConnorMcleod;0;2;1317594512
      löschmichendlich
      ;Sir ConnorMcleod;2;0;1317757704
      Snoopyy
      ;Ass53;0;2;1317757704
      DJmünstermaus
      ;Arwen7614;0;2;1317757704
      DJ Avalon45
      ;PowerCyborg;1;2;1317757704
      hexenwesen10
      ;sigi 2001;2;1;1317757704
      Niam47
      ;akropolis1962;1;2;1317757704
      löschmichendlich
      ;Ass53;2;0;1317757704
      Arwen7614
      ;PowerCyborg;1;2;1317757704
      hexenwesen10
      ;akropolis1962;2;0;1317757704
      löschmichendlich
      ;PowerCyborg;2;0;1317757704
      akropolis1962
      ;PowerCyborg;0;2;1317757704
      hexenwesen10
      ;löschmichendlich;0;2;1317757704
      hexenwesen10
      ;Mamasschlumpf78;0;2;1317763023
      löschmichendlich
      ;Ass53;2;1;1317763023
      Sir ConnorMcleod
      ;PekingPeter;1;2;1317763023
      PowerCyborg
      ;Niam47;2;0;1317763023
      Mamasschlumpf78
      ;löschmichendlich;0;2;1317763023
      PekingPeter
      ;PowerCyborg;2;0;1317763023
      Mamasschlumpf78
      ;PowerCyborg;0;2;1317763023
      löschmichendlich
      ;PekingPeter;0;2;1317763023
      PowerCyborg
      ;Sir ConnorMcleod;2;0;1318027478
      Niam47
      ;ziggi;1;2;1318027478
      joggi49
      ;DJ Avalon45;2;0;1318027478
      Meeresreuber481
      ;DJmünstermaus;2;0;1318027478
      El Oscar
      ;Arwen7614;2;1;1318027478
      PowerCyborg
      ;ziggi;0;2;1318027478
      joggi49
      ;Meeresreuber481;2;1;1318027478
      El Oscar
      ;ziggi;1;2;1318027478
      Meeresreuber481
      ;El Oscar;1;2;1318027478
      joggi49
      ;ziggi;1;2;1318027478 
      Das ist ein Auszug von ca. 1142 Zeilen.
      Das Value 4 ist der Timestamp und da will ich mit MAX() den größten rausfiltern.

      Das merkwürdige ist jedoch das, es bis vor ca. 2-3 Wochen die Funktion MAX(), das alles wunderbar gemacht hat.
      Aber aufeinmal liefert mir diese Funktion nur den Zweitgrößten Timestamp.
      Und genau das ist mir unverständlich.
      Liegt es an der Größe/Menge der Zeilen/Einträge ?

      Comment


      • #4
        Das sind CSV-Daten, die du sicher nicht in der Variable gespeichert hast.

        Benutze var_export($name_quote[4]) wie es dir gesagt wurde!

        Comment


        • #5
          Wenn das wirklich die Ausgabe von var_export($name_quote[4]) ist, dann kann das nicht funktionieren!
          Dann hat das auch noch nie funktioniert.
          Wir werden alle sterben

          Comment


          • #6
            Es hatte ja funktioniert !!
            Gut ich habe noch mal neu angesetzt:
            PHP Code:
            $datei file("elo.php"); // meine CSV (siehe oben)
            foreach ($datei as $ki => $va){
            list (
            $name_1,$name_2,$erg_1,$erg_2,$timestamp) = explode(";",$va);
            $letzte_datum max($timestamp);
            }
            echo 
            $letzte_datum
            Das wirft folgende Fehlermeldung aus (auch wenn das Echo in der Schleife steht):
            Warning: max() [function.max]: When only one parameter is given, it must be an array in ................

            Und:
            PHP Code:
            var_export($name_quote[4]); 
            Gibt mir aus:
            array ( 0 => 'PekingPeter', 1 => '62.500', 2 => 5, 3 => 3, 4 => '1334611172 ', )Array

            Und das ist wieder das vorletzte Datum. Ich werd noch irre

            Comment


            • #7
              Was ist an der Fehlermeldung "Warning: max() [function.max]: When only one parameter is given, it must be an array in .............." nicht zu verstehen? max() erwartet als Parameter ein Array, was du ihm nicht gibst.

              Und von $name_quote[4] ist der größte Zahlenwert nun mal 1334611172. 62.500 ist der zweitgrößte Wert, 5 der drittgrößte Wert und 3 der viertgrößte Wert.

              Comment


              • #8
                Ja h3ll,
                das ist mir schon klar.
                Das Array §name_quote sieht so aus:

                PHP Code:
                array (   =>    array (
                     
                => 'hexenwesen10',
                     
                => '62.500',
                     
                => 5,     
                     
                => 3,
                     
                => '1334787176 ',   ), 
                wenn ich mit
                PHP Code:
                MAX($name_quote[4]); 
                den höchsten wert ermitteln will,
                bekomme ich nur den Vorletzen Wert aus Value 4. Value 4 gibt es ca 1140 mal mit unterschiedlichen
                timestamps. Und ich will eben den höchsten der ca 1140 timestamps ermitteln
                Last edited by Wasser_Wanderer; 20-04-2012, 12:07.

                Comment


                • #9
                  Im Array sind keine 1140 Werte. max() ermittelt nur den höchsten Wert aus diesen einem Array. Und da ist der höchste Wert nun mal 1334787176.

                  Comment


                  • #10
                    Achso, hier mal die WEB-Seite wo das Problem auftaucht:
                    FLC Billard-Quoten

                    Wenn ihr mit der Maus über das orange Info-Feld geht,
                    steht unter "Zeitraum der erfassten Turniere" das vorletzte Datum 16.04.
                    anstelle vom 19:04. wie es in der Haupttabelle beim Spieler auf Platz 2
                    korrekt steht

                    Comment


                    • #11
                      Originally posted by h3ll View Post
                      Im Array sind keine 1140 Werte. max() ermittelt nur den höchsten Wert aus diesen einem Array. Und da ist der höchste Wert nun mal 1334787176.
                      Jaaaaaaaaaaaa.

                      In dem Gesamten-Array sind 1140 Einzel-Einträge !!
                      Das war nur die Struktur als Beispiel. Oder soll ich 1140 Zeilen posten ?
                      Das habe ich doch genau so geschrieben.

                      Comment


                      • #12
                        PHP Code:
                        $maxValue max(array_map(
                            function(array 
                        $row) {
                                return 
                        $row[4];
                            },
                            
                        $data
                        )); 

                        Comment


                        • #13
                          Originally posted by h3ll View Post
                          PHP Code:
                          $maxValue max(array_map(
                              function(array 
                          $row) {
                                  return 
                          $row[4];
                              },
                              
                          $data
                          )); 
                          Nicht böse sein, aber diese Antwort habe ich nicht verstanden.

                          Comment


                          • #14
                            Das ist die Lösung für dein Problem.

                            Und zum Verstehen, solltest du evtl. mal das Handbuch zur Hilfe nehmen.
                            Wir werden alle sterben

                            Comment


                            • #15
                              Originally posted by Wasser_Wanderer View Post
                              Nicht böse sein, aber diese Antwort habe ich nicht verstanden.
                              Die Funktion array_map() erzeugt ein Array, welches aus jedem Datensatz ($row) nur das zu vergleichende Feld ([4]) enthält. Anschließend ermittelt max() aus diesem neu erzeugten Array den größten Wert.

                              Wenn du dieses Array nicht extra erzeugen möchtest, benutzt du array_reduce():
                              PHP Code:
                              $max array_reduce(
                                  
                              // deine 1142 Datensaetze
                                  
                              $data
                                  
                              // diese Funktion wird fuer jeden Eintrag aufgerufen und
                                  // vergleicht den Startwert mit dem Feld 4 dieses Eintrages.
                                  // Der groeszere der beiden wird zurückgegeben.
                                  // Am Ende bleibt der groeszte von allen uebrig
                                  
                              function(& $max$entry) { return max($entry[4], $max); },
                                   
                              // Startwert
                                  
                              0
                              ); 
                              Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                              Comment

                              Working...
                              X