Alternative für split in PHP 7

  • Hallo,
    habe mal eine Frage zu PHP 7. Ab dieser Version wurde ja split abgeschafft. Nun habe ich ein Erinnerungsscript, welches noch mit split arbeitet, seit Jahren mit einer älteren PHP-Version anstandlos läuft. Es wird per Cronjob täglich 1x gestartet und schickt mir mit dem PHP-Mailer eine Erinnerungsmail, wenn es etwas wie einen Geburtstag o.ä. gibt.


    Da ich PHP nicht wirklich kann (mehr zusammenpappe), verstehe ich manche Anleitungen nicht. Was ich gelesen habe arbeitet meist so, dass ein Array zurückgegeben wird. Was ich benötige ist aber kein Array, sondern nur drei einzelne Variablen.


    Codeschnipsel:

    PHP
    1. list($vname, $name, $date) = split('[;]', $buffer);


    In $buffer befindet sich eine Zeile aus einer Textdatei, welche dieses Format hat und vorher eingelesen wurde.


    Zitat

    Reiner;Müsal;12.3.1956


    Durch den alten split-Befehl hatte ich dann drei Variablen, 1x Vorname ($vname), 1x Nachname ($name) und das Geburtsdatum ($date).
    Das habe ich jetzt mit explode versucht, bekomme dann aber die Fehlermeldung:


    Zitat

    Notice: A non well formed numeric value encountered in...


    Fragen:
    Wie müsste eine alternative Zeile zu meiner Splitzeile aussehen, welch anderer Befehl?
    Gibt es einen anderen Weg die Fehlermeldung mit explode zu vermeiden, z.B. anderes Format des hinterlegten Datums?


    Ich freue mich auf Antworten, in der Hoffnung die zu verstehen ;)
    Danke für die Aufmerksamkeit

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • PHP
    1. <?php
    2. $buffer = "Reiner;Müsal;12.3.1956";
    3. list($vname, $name, $date) = explode(';', $buffer);
    4. echo "$vname, $name, $date";
    5. ?>
  • Ich muss mir die Keule auf den Kopf schlagen. Ich Dussel hatte die Zeilennummern im Notepad++ aus. Die eigentliche Fehlermeldung bezieht sich wohl auf eine Berechnung. Da ich nur split gegen explode getauscht habe, nahm ich an es liegt daran. Ich lerne dazu, geil.
    Sorry dafür. Dennoch vielen Dank bis hier hin. :danke2:


    Ich habe $date in $datum umbenannt, sonst stiftet es Verwirrung mit date!


    Nachdem ich alle Variablen habe, will ich das Alter der Person errechnen. Dazu zerlege ich das $datum nochmal, um das Jahr alleine zu haben, hier also 1956. Klappt soweit.


    Die Ausgabe mit...

    PHP
    1. echo "$diesjahr $jahr";


    ...ergibt richtig:

    Zitat

    2018 1956


    Wenn ich jetzt 2018 - 1956 rechne...

    PHP
    1. $alter = $diesjahr - $jahr;


    ... kommt die Fehlermeldung:

    Zitat

    Notice: A non well formed numeric value encountered in


    Das hat unter bisherigen PHP-Versionen und mit split immer funktioniert. Jetzt mit PHP 7 und mit explode nicht mehr. :?:




    Kann es sein, dass eine der beiden Variablen (die 1956) keine Zahl, sondern ein String ist, mit dem sich eben nicht numerisch rechnen lässt?


    Hier mal der relevante Zerlegungscode:


    Wie bekomme ich aus $jahr (meine Vermutung Stringinhalt) eine numerische Variable, also Zahl?


    Auch hier wieder, vielen Dank für die Aufmerksamkeit und Hilfe.
    MfG

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Was möchtest du mir damit sagen?


    Dass deine Altersberechnung falsch ist. Am 1.1.2019 ist dein Reiner schon 63 und das stimmt dann nicht. Richtig berechnen kannst du das mit der verlinkten Funktion zur Doku

  • Ich lag mit meiner Vermutung richtig. $jahr war wohl ein String, umgewandelt mit deinem Hinweis intval und schon klappt es. Die Berechnung funktioniert wieder, Fehlermeldung bleibt aus. Warum früher mit split eine numerische Variable und mit explode eine Stringvariable gebildet wird, muss ich noch lesen.


    Jetzt muss ich wieder den PHP-Mailer zum versenden bringen, der geht auch nicht mehr.


    Vielen lieben Dank


    - - - Aktualisiert - - -


    Dass deine Altersberechnung falsch ist. Am 1.1.2019 ist dein Reiner schon 63 und das stimmt dann nicht. Richtig berechnen kannst du das mit der verlinkten Funktion zur Doku


    Die Berechnung, jetzt mit intval ist aber richtig. Mein Reiner ist am 1.1.2019 noch nicht 63, weil die Berechnung erst einen Tag vor seinem Geburtstag durchgeführt (tägliches Script mit Crontab) wird und mir dann erst, einen Tag vorher seinem Geburtstag eine Mail mit dem Inhalt zugeschickt wird, der da ist:

    Morgen hat Reiner Müsal, geboren 1956, Geburtstag, er wird 63 Jahre alt.


    Also alles korrekt und richtig.


    Trotzdem danke, dass du mitgedacht hast ;-)

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.