Funktion max(): Aufeinmal Fehlerhaft

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

  • 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

    Kommentar


    • #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 ?

      Kommentar


      • #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!

        Kommentar


        • #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

          Kommentar


          • #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

            Kommentar


            • #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.

              Kommentar


              • #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
                Zuletzt geändert von Wasser_Wanderer; 20.04.2012, 13:07.

                Kommentar


                • #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.

                  Kommentar


                  • #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

                    Kommentar


                    • #11
                      Zitat von h3ll Beitrag anzeigen
                      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.

                      Kommentar


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

                        Kommentar


                        • #13
                          Zitat von h3ll Beitrag anzeigen
                          PHP-Code:
                          $maxValue max(array_map(
                              function(array 
                          $row) {
                                  return 
                          $row[4];
                              },
                              
                          $data
                          )); 
                          Nicht böse sein, aber diese Antwort habe ich nicht verstanden.

                          Kommentar


                          • #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

                            Kommentar


                            • #15
                              Zitat von Wasser_Wanderer Beitrag anzeigen
                              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!

                              Kommentar

                              Lädt...
                              X