Einleitung: Warum Strings und Zahlen in PHP eine ewige Dramatik sind
\nStellen Sie sich vor: Sie schreiben einen Versandkostenrechner, und der Benutzer gibt die Anzahl der Artikel als String "5" ein. Sie versuchen, 10 zu addieren – und erhalten "510" statt 15. Kommt Ihnen bekannt vor? Willkommen in der Welt der Typkonvertierung in PHP!
Die Frage "How do I convert a string to a number in PHP?" ist eine der beliebtesten auf Stack Overflow (über 2 Millionen Aufrufe). Und das zu Recht: PHP ist bekannt für seine implizite Typisierung, die sowohl das Leben erleichtert als auch Fallstricke bereithält.
\nIn dieser Anleitung behandeln wir 5 zuverlässige Methoden zur Umwandlung eines Strings in eine Zahl, räumen mit Mythen auf und lernen, Bugs zu vermeiden. Los geht's!
\n\nTheorie: Was passiert unter der Haube von PHP?
\nPHP ist eine Sprache mit dynamischer Typisierung. Eine Variable kann ein String sein und eine Sekunde später eine Zahl. Aber es gibt einen Haken:
\n- \n
- Implizite Typumwandlung – PHP entscheidet selbst, wie Daten interpretiert werden (und liegt oft falsch). \n
- Explizite Typumwandlung – Sie übernehmen die Kontrolle. \n
Wenn Sie "5" + 10 schreiben, wandelt PHP den String "5" automatisch in eine Zahl um. Aber versuchen Sie "5 Äpfel" + 10 – und Sie erhalten 15 (PHP verwirft stillschweigend " Äpfel"). Und "Äpfel 5" + 10 ergibt 10 (der String wird als Null betrachtet). Chaos? Ja. Aber wir schaffen Ordnung.
Methode 1: Typumwandlungsoperator (int) und (float)
\nDer schnellste und einfachste Weg ist die Verwendung von Casting:
\n<?php\n$string = "42.8";\n$int = (int)$string; // 42 (ganzzahliger Anteil)\n$float = (float)$string; // 42.8\n\necho $int; // 42\necho $float; // 42.8\n?>\nWichtig: (int) verwirft den Nachkommateil ohne Rundung. Verwenden Sie für Rundungen round() nach der Umwandlung.
Wann verwenden: Wenn Sie sicher sind, dass der String nur eine Zahl enthält, und Sie eine schnelle Umwandlung benötigen.
\n\nMethode 2: Die Funktionen intval() und floatval()
\nDies sind die "großen Brüder" des Castings – lesbarer und flexibler:
\n<?php\n$string = "123.45abc";\n\n$int = intval($string); // 123\n$float = floatval($string); // 123.45\n\n// Mit Angabe des Zahlensystems (nur für intval)\n$hexString = "1A";\n$hexInt = intval($hexString, 16); // 26 (wandelt hexadezimalen String um)\n\necho $int; // 123\necho $float; // 123.45\necho $hexInt; // 26\n?>\nBesonderheit: intval() kann mit verschiedenen Zahlensystemen arbeiten (binär, oktal, hexadezimal). floatval() nur mit dem Dezimalsystem.
Wann verwenden: Wenn "Müll" am Ende des Strings verarbeitet werden muss oder mit nicht standardmäßigen Zahlensystemen gearbeitet wird.
\n\nMethode 3: Die Funktion settype() – Umwandlung mit Rückgabe von true/false
\nMöchten Sie nicht nur konvertieren, sondern auch den Erfolg der Operation prüfen? Verwenden Sie settype():
<?php\n$string = "99.9";\n$result = settype($string, "float"); // true\n\necho $string; // 99.9 (jetzt ein float)\necho $result; // 1 (true)\n\n// Wenn der String nicht numerisch ist\n$badString = "hallo";\n$result = settype($badString, "integer"); // false\n\necho $badString; // 0 (in Null umgewandelt)\necho $result; // (leer, false)\n?>\nWichtig: settype() ändert die Variable selbst, anstatt einen neuen Wert zurückzugeben. Praktisch, wenn sichergestellt werden soll, dass der Typ geändert wurde.
Wann verwenden: Wenn eine Überprüfung des Konvertierungserfolgs erforderlich ist (z. B. bei Benutzereingaben).
\n\nMethode 4: Arithmetische Tricks (und warum man sie besser nicht verwenden sollte)
\nJa, man kann $number = $string + 0 schreiben – PHP wandelt den String selbst in eine Zahl um. Oder $number = $st