Funktion max(): Aufeinmal Fehlerhaft

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

  • #16
    Danke an fireweasel. Problem gelöst

    @ fireweasel: Vielen Dank für deine Erklärung und Lösung

    @ h3ll: Auch die vielen Dank. Deine Lösung funktioniert suppi

    @ combie: Danke für den Hinweis auf das Handbuch

    Fazit:
    Die vorgeschlagenen Lösungen funktionieren.

    Aber:
    Das die Funktion max() nach ca 1100 Werten schlapp gemacht hatte,
    das ist mir immer noch nicht klar.

    P.S.
    Na toll. Mein Hoster unterstützt diese Funktion nicht. PHP Version 5.2.9
    Lokal mit xampp geht es. PHP Version 5.3.0
    Zuletzt geändert von Wasser_Wanderer; 21.04.2012, 12:09.

    Kommentar


    • #17
      Mein Hoster unterstützt diese Funktion nicht.
      Dann baust du eben um auf den "Old Style" Call Back.
      Wir werden alle sterben

      Kommentar


      • #18
        Zitat von combie Beitrag anzeigen
        Dann baust du eben um auf den "Old Style" Call Back.
        Das werde ich dann wohl machen müssen
        Oder ich ziehe um. Das werd ich eh machen müssen, alleine
        wegen OOP. Das wird meine nächste "Baustelle" werden

        Kommentar


        • #19
          Zitat von Wasser_Wanderer Beitrag anzeigen
          Fazit:
          Die vorgeschlagenen Lösungen funktionieren.
          Hand hoch, wer etwas anderes erwartet hatte ...

          Aber:
          Das die Funktion max() nach ca 1100 Werten schlapp gemacht hatte,
          das ist mir immer noch nicht klar.
          Das tat sie definitiv nicht. Sie kann Arrays mit wesentlich mehr Einträgen problemlos verarbeiten. Den Fehler musst du daher bei dir selbst suchen ...

          Mein Hoster unterstützt diese Funktion nicht. PHP Version 5.2.9
          Lokal mit xampp geht es. PHP Version 5.3.0
          Ich liebe es, wenn sich ein Fragensteller mehrdeutig ausdrückt. Dass mit "unterstützt diese Funktion nicht" das Basteln von anonymen Funktionen über function(){} und nicht max() gemeint ist, erschließt sich nur, wenn man weiß, welche PHP-Version was von beiden kann.

          Du darfst create_function() gerne nutzen. In der normalen Anwendung (Aufruf) gibts keine Unterschiede. Nur beim Deklarieren der Funktion wirst du in den meisten Quelltext-Editoren aufs Syntax-Highlighting verzichten müssen.

          PHP-Code:
          $max array_reduce
              
          $data,  
              
          create_function('& $max, $entry''return max($entry[4], $max);'), 
              

          ); 
          Selbstverständlich kann man etwas so triviales wie die größte Zahl aus einer Reihe von Zahlen auch von Hand in einer Schleife berechnen:

          PHP-Code:
          $max 0// der Initialwert sollte möglichst klein sein
          foreach ($data as $entry) {
              
          $max max($entry[4], $max);

          ... oder ganz ohne die blödsinnige max()-Funktion:

          PHP-Code:
          $max 0// der Initialwert sollte möglichst klein sein
          foreach ($data as $entry) {
              
          $max $entry[4] > $max $entry[4] : $max;

          ... oder (vielleicht) noch besser verständlich:

          PHP-Code:
          $max 0// der Initialwert sollte möglichst klein sein
          foreach ($data as $entry) {
              if (
          $entry[4] > $max) {
                  
          $max $entry[4];
              }

          Oder ich ziehe um. Das werd ich eh machen müssen, alleine
          wegen OOP.
          Wieso? Die OOP-Fähigkeiten von PHP 5.3.x sind nicht wesentlich besser als die der anderen 5-er Versionen. Das komische "Late-Static-Binding" ist ganz nett, aber man braucht es nicht, um objekt-orientiert zu programmieren.

          Der Grund, warum man eine möglichst aktuelle PHP-Version benutzen sollte, sind die ständig auftretenden Sicherheitsprobleme. Die gibts zwar auch im aktuellen 5.4.0 in ausreichender Zahl, aber wenigstens sind da die meisten bekannten Löcher gestopft.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #20
            Zitat von fireweasel Beitrag anzeigen
            Wieso? Die OOP-Fähigkeiten von PHP 5.3.x sind nicht wesentlich besser als die der anderen 5-er Versionen.
            Aber hallo. Namespaces sind eine sehr deutliche Verbesserung, sowie late static bindings. Viele Frameworks setzen PHP 5.3 sogar voraus.

            Kommentar


            • #21
              Zitat von fireweasel Beitrag anzeigen

              Das tat sie definitiv nicht. Sie kann Arrays mit wesentlich mehr Einträgen problemlos verarbeiten. Den Fehler musst du daher bei dir selbst suchen ...
              Sorry,
              aber ich hatte definitiv nicht an meinem Script geändert. Ich schwöre.

              Jetzt kommt aber das Irrwitzige:
              Meine Programmierung (so wie sie war) funktioniert seit heute wieder.
              Und ich hab nichts daran geändert.

              Da ist eine Fehlersuche zum scheitern verurteilt.

              Zu deinen anderen Erläuterungen: Danke für deine Tipps
              Hab wieder was gelernt

              Kommentar


              • #22
                Stimmt, PHP muss ein Eigenleben entwickelt haben.

                Kommentar


                • #23
                  Zitat von Wasser_Wanderer Beitrag anzeigen
                  Sorry,
                  aber ich hatte definitiv nicht an meinem Script geändert. Ich schwöre.
                  Wenn nicht am Script, dann an den verarbeiteten Daten.
                  Warum es zeitweise scheinbar funktioniert und dann wieder nicht funktioniert hatte, wurde dir ja schon ausführlich erklärt. Du solltest dich mal mit der Funktionsweise und den unterschiedlichen Arbeitsmodi (Array vs. Scalar) von max() vertraut machen, sprich: das Handbuch dazu lesen und mit Testdaten und var_dump() versuchen, nachzuvollziehen, was da passiert.

                  Zitat von h3ll Beitrag anzeigen
                  Aber hallo. Namespaces sind eine sehr deutliche Verbesserung, ...
                  Namespaces sind aber kein OOP-Feature. Und über die Art, wie sie implementiert wurden (keine Klassenintegration, das unmöglichste Separator-Zeichen, was man sich ausdenken kann, usw.), decken wir lieber den Mantel des Schweigens ...
                  ... sowie late static bindings.
                  Hatte ich erwähnt. Wird trotzdem eher selten benötigt. Eigentlich nur, wenn man in Basisklassen festlegen möchte, dass Properties oder Methoden einer abgeleiteten Kindklasse (wenn vorhanden) angesteuert werden sollen. Arbeitet man nicht mit "statischen" Properties oder Methoden sondern mit gewöhnlichen Objekten, braucht man das nicht, weil die schon immer wussten, von welcher Klasse sie abstammen.

                  Viele Frameworks setzen PHP 5.3 sogar voraus.
                  Ja und? Welches Framework wird der OP wohl demnächst einsetzen (wollen)? Oder, um nicht vollkommen vom Thema abzukommen: Welches wäre für ihn empfehlenswert (als potenzieller OOP-Einsteiger)?
                  Zuletzt geändert von fireweasel; 24.04.2012, 20:21. Grund: Ergänzungen
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar


                  • #24
                    Zitat von TobiaZ Beitrag anzeigen
                    Stimmt, PHP muss ein Eigenleben entwickelt haben.
                    Ich bin ja für Ironie empfänglich.

                    Aber nicht für unsachliche Beiträge hier im Forum

                    Kommentar


                    • #25
                      Zitat von Wasser_Wanderer Beitrag anzeigen
                      Ich bin ja für Ironie empfänglich.

                      Aber nicht für unsachliche Beiträge hier im Forum
                      Die Selbstzersörungs- und Selbstheilungskräfte von PHP hast du ins Spiel gebracht.
                      Damit kannst du uns nicht verwirren, nur dich selber
                      Wir werden alle sterben

                      Kommentar

                      Lädt...
                      X