intval()
Die intval()-Funktion ist eine eingebaute PHP-Funktion, die eine Variable in einen Integer umwandelt. Sie ähnelt der floatval()-Funktion.
Einführung
Die Funktion intval() gibt den Integer-Wert einer Variable zurück. Sie ist eine der Typ-Konvertierungsfunktionen von PHP, zusammen mit floatval(), strval() und boolval(). Man greift auf intval() zurück, wenn Daten vorhanden sind, die wie eine Zahl aussehen, aber als String, Float oder einem anderen Typ gespeichert sind — zum Beispiel ein Wert aus einem Formular, einem URL-Abfrageparameter oder einer CSV-Datei — und man einen echten Integer zum Zählen, Indexieren oder für arithmetische Operationen benötigt.
Diese Seite behandelt die Signatur der Funktion, wie der optionale Parameter $base funktioniert, was bei den einzelnen Eingabetypen passiert und welche Fallstricke es zu beachten gibt.
Syntax
intval(mixed $value, int $base = 10): intDie Funktion nimmt bis zu zwei Parameter entgegen und gibt immer einen int zurück:
$value— der zu konvertierende Wert. Es kann sich um einen String, Float, Boolean,nulloder ein Array handeln.$base(optional) — die numerische Basis, in der$valueinterpretiert werden soll. Sie wird nur verwendet, wenn$valueein String ist; bei jedem anderen Typ wird sie ignoriert. Der Standardwert ist10.
intval() wirft niemals eine Ausnahme und gibt niemals null zurück. Wenn keine Zahl geparst werden kann, gibt die Funktion 0 zurück.
Grundlegendes Beispiel
Hier ist der häufigste Anwendungsfall — das Umwandeln von numerisch aussehenden Strings in Integer, einschließlich nicht-dezimaler Basen:
Das zweite Argument gibt intval() an, wie der String gelesen werden soll. "101010" in Basis 2 entspricht dem Dezimalwert 42, und "2c" in Basis 16 entspricht dem Dezimalwert 44. Ein String ohne führenden numerischen Teil, wie "not a number", ergibt 0.
Konvertierung von Nicht-String-Typen
Wenn etwas anderes als ein String übergeben wird, folgt intval() den normalen Integer-Casting-Regeln von PHP und ignoriert $base:
<?php
echo intval(4.7) . "\n"; // 4 (floats are truncated, not rounded)
echo intval(true) . "\n"; // 1 (false → 0)
echo intval(null) . "\n"; // 0
echo intval([]) . "\n"; // 0 (empty array)
echo intval([0]) . "\n"; // 1 (non-empty array)
?>Zwei wichtige Punkte:
- Floats werden in Richtung null abgeschnitten, nicht gerundet.
intval(4.7)ergibt4undintval(-4.7)ergibt-4. Wenn Runden gewünscht ist, sollte zuerstround()verwendet werden. - Arrays werden zu
0konvertiert, wenn sie leer sind, und zu1, wenn sie nicht leer sind — was fast nie das gewünschte Ergebnis ist, daher sollte man sich nicht darauf verlassen.
Wie Strings geparst werden
Bei Strings liest intval() den führenden numerischen Teil und stoppt beim ersten Zeichen, das nicht interpretiert werden kann:
<?php
echo intval("12abc") . "\n"; // 12 (stops at "a")
echo intval(" 123 ") . "\n"; // 123 (leading whitespace is skipped)
echo intval("abc12") . "\n"; // 0 (starts with a non-number)
?>Automatische Basisermittlung mit $base = 0
Wenn $base auf 0 gesetzt wird, untersucht intval() das Präfix des Strings und wählt die Basis automatisch:
<?php
echo intval("0x1A", 0) . "\n"; // 26 (0x → hexadecimal)
echo intval("0b101", 0) . "\n"; // 5 (0b → binary)
echo intval("042", 0) . "\n"; // 34 (leading 0 → octal)
echo intval("42", 0) . "\n"; // 42 (no prefix → decimal)
?>Dies ist praktisch beim Parsen von Konfigurationswerten, die in verschiedenen Notationen geschrieben sein können.
Häufige Fallstricke
Oktale Literale vs. oktale Strings. Eine führende Null im Quellcode macht eine Zahl zu einem oktalen Literal, bevor intval() überhaupt ausgeführt wird, daher ergibt intval(042) den Wert 34 (weil 042 bereits 34 ist). Der String "042" hingegen ist unter der Standard-Basis 10 der Dezimalwert 42. Zahlen sollten als Strings gespeichert werden, wenn ein vorhersehbares Parsing gewünscht ist.
$base hat keine Auswirkung auf Nicht-Strings. intval(255, 16) ergibt 255, nicht 597 — die Basis wird ignoriert, weil 255 bereits ein Integer ist. Wenn die Ziffern neu interpretiert werden sollen, muss von einem String konvertiert werden.
Werte außerhalb des Bereichs. Auf einer 64-Bit-Plattform wird ein Wert, der größer als PHP_INT_MAX ist, bei PHP_INT_MAX gesättigt, anstatt zu einem negativen Wert überzulaufen.
Wann intval() vs. Alternativen verwenden
intval()verwenden, wenn eine nachsichtige Konvertierung gewünscht ist, die bei einem Fehler0zurückgibt und andere Basen lesen kann.(int)-Casting ((int)$value) für eine schnelle Dezimal-Konvertierung; verhält sich wieintval()mit Basis 10.filter_var($value, FILTER_VALIDATE_INT)verwenden, wenn Validierung benötigt wird — es gibtfalsefür Nicht-Integer-Eingaben zurück, anstatt stillschweigend0zu liefern, sodass eine echte0von einem Parse-Fehler unterschieden werden kann.
Fazit
intval() konvertiert Strings, Floats, Booleans und andere Werte in einen Integer, mit einer optionalen Basis zum Parsen von Strings in Binär-, Oktal-, Hex- oder einer beliebigen Basis von 2 bis 36. Das nachsichtige Verhalten — Rückgabe von 0 bei einem Fehler und Abschneiden von Floats — macht die Funktion praktisch, aber diese Nachsichtigkeit kann fehlerhafte Eingaben verbergen, daher sollte filter_var() bevorzugt werden, wenn tatsächlich eine Validierung notwendig ist. Für verwandte Konvertierungen siehe floatval(), strval() und gettype().