Menu

PHP Typumwandlung: String in Int, intval() und (int)

Einen PHP-String wandelst du mit (int) $str oder intval($str) in eine Ganzzahl um; (int) "42" ist 42 und (int) "12abc" ist 12. Hier: Casts nach int, float, bool, string und array, numerische Strings, intval mit Basis, settype und wie du Eingaben prüfst, statt still 0 zu bekommen.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Um einen Wert in einen anderen Typ umzuwandeln, schreibst du den Typ in Klammern davor: (int) "42" ergibt die Ganzzahl 42. Die Funktionsform intval("42") macht dasselbe. Ein Cast schlägt nie fehl: Text, der keine Zahl ist, wird zu 0, und ein String, der mit Ziffern beginnt, behält nur diese Ziffern.

PHP kennt die Casts (int), (float), (string), (bool), (array) und (object). Zu jedem gibt es auch eine Funktion: intval(), floatval(), strval(), boolval().

String in Int: was (int) und intval() liefern

PHP liest Ziffern vom Anfang des Strings, nachdem führender Leerraum übersprungen wurde, und hört beim ersten Zeichen auf, das nicht zu einer Zahl passt. Exponentenschreibweise zählt als Zahl, ein Präfix 0x nicht.

Beachte, dass "12.7" zu 12 wird: Ein Cast nach int schneidet die Nachkommastellen ab, er rundet nicht. Weder (int) noch intval() gibt hier eine Warnung aus, egal welche Eingabe.

intval() mit Basis

intval($value, $base) liest den String in einem anderen Zahlensystem. Mit Basis 0 schaut PHP auf das Präfix: 0x für Hex, 0b für Binär, eine führende 0 für Oktal.

Float in Int: Abschneiden, nicht Runden

(int) verwirft alles nach dem Dezimalpunkt, in Richtung null. Runde vorher, wenn du die nächste ganze Zahl willst, und achte auf die Klammern:

Das letzte Paar ist die klassische Float-Falle: (0.1 + 0.7) * 10 wird als 7.999999... gespeichert, also ergibt Abschneiden 7. Vorher zu runden ergibt 8. Die Seite zu Mathe behandelt round, floor und ceil.

Casts nach bool, string und array

Bei bool werden nur eine Handvoll Werte zu false: 0, 0.0, "", "0", null und []. Alles andere ist true, auch "0.0", " " und "false".

Bei string wird true zu "1", während false und null beide zu "" werden. Floats verlieren ein abschließendes .0, und sehr große oder sehr kleine Floats verwenden die Exponentenschreibweise.

Ein Array in einen String umzuwandeln verbindet es nicht. Das hier gibt Tags: Array aus:

<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;

und PHP hängt eine Warnung an:

Warning: Array to string conversion in /home/index.php on line 3

Verwende implode(", ", $array) oder json_encode($array), um aus einem Array Text zu machen.

Jeder Cast im Überblick

Wähle einen Wert, um zu sehen, was intval, (bool), strval, is_numeric und gettype dafür liefern. Jede Zelle wurde von PHP 8.3 berechnet.

intval, (bool), strval und is_numeric für jeden Wert von $x
Point at or tap a cell to read it as PHP.
$xintvalboolstrvalis_numericgettype
"10"
"1abc"
"abc"
""
" "
"0"
"0.0"
"1e1"
"010"
1.5
true
false
null
[]
[1, 2]
Every cell computed by PHP 8.3.19.

Numerische Strings und automatische Umwandlung

Ein numerischer String ist ein String, der wie eine Zahl aussieht: "12", "-3.5", "1e3", mit optionalem Leerraum drumherum. PHP wandelt diese in Rechnungen automatisch um, und is_numeric() sagt dir, ob ein String dazuzählt.

"12abc" + 1 ergibt immer noch 13, aber PHP 8 gibt Warning: A non-numeric value encountered aus, und "abc" + 1 wirft einen TypeError. Caste oder prüfe Nutzereingaben, bevor du damit rechnest.

settype() und gettype()

settype() ändert den Typ einer Variable direkt, und gettype() meldet ihn. get_debug_type() liefert die kürzeren Namen, die du in Fehlermeldungen siehst (int, float, string).

Die meisten verwenden stattdessen einen Cast ($value = (int) $value;), weil er kürzer ist und sich genauso liest.

Eingaben prüfen, statt sie zu casten

(int) sagt nie nein, also wird (int) "abc" still zu 0 und (int) "5 apples" zu 5. Für Formulareingaben verwendest du filter_var mit FILTER_VALIDATE_INT: Es liefert die Ganzzahl oder false.

Vergleiche das Ergebnis mit === false, denn 0 ist eine gültige Ganzzahl, und == false würde sie ablehnen. Die Seite zu filter_var zeigt Wertebereiche und andere Validatoren.

Häufig gestellte Fragen

Wie wandle ich in PHP einen String in einen Int um?

Mit (int) $str oder intval($str); für Basis 10 liefern beide dasselbe Ergebnis. (int) "42" ist 42, (int) "12abc" ist 12 und (int) "abc" ist 0. Um Eingaben abzulehnen, die keine ganze Zahl sind, verwendest du filter_var($str, FILTER_VALIDATE_INT), das false liefert, statt zu raten.

Was ist der Unterschied zwischen intval() und (int) in PHP?

Für Basis 10 liefern sie dasselbe Ergebnis. intval() nimmt zusätzlich eine Basis: intval('ff', 16) ist 255, und mit Basis 0 liest es Präfixe wie 0x, 0b und eine führende 0 für Oktal. Als Funktion lässt sich intval außerdem als Callback übergeben, etwa in array_map('intval', $values).

Was liefert (bool) "0" in PHP?

false. Der String "0" gehört zu den falsy Werten von PHP, zusammen mit "", 0, 0.0, null und []. Jeder andere String ist true, auch "0.0", " " und "false".

Wie wandle ich in PHP eine Zahl in einen String um?

Mit (string) $n, strval($n) oder indem du sie in einen String setzt: "$n". (string) 3.0 ist "3"; für eine feste Anzahl an Nachkommastellen verwendest du number_format($n, 2) oder sprintf('%.2f', $n).

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S