Mit intval() wandelst du Werte und Zeichenkette in PHP zuverlässig in Ganzzahlen um. Im folgenden Artikel findest du die Syntax, eine klare Erklärung der Parameter und viele praxisnahe Beispiele, die dir zeigen, wie du Fehlerquellen erkennst und Spezialfälle sicher behandelst.

1. Einführung: Was ist intval() und wozu dient es?
Mit intval() wandelst du Werte in PHP gezielt in Integer um. Dabei berücksichtigt die Funktion verschiedene Typen, Präfixe und Spezialfälle – mehr als ein simples Type-Casting.
1.1. Kurze, prägnante Definition der Funktion.
Die PHP-Funktion intval() konvertiert einen beliebigen Wert – etwa einen String, eine Zahl, ein Boolean oder sogar ein Array – in einen Integer.
1.2. Der Kernzweck: Verlässliche Typumwandlung in ganze Zahlen.
intval() sorgt für vorhersehbare, konsistente Ergebnisse und wird überall dort gebraucht, wo du Eingabewerte, Rückgaben oder Variablen explizit als Ganzzahlen behandeln willst.
1.3. Erste Abgrenzung: Warum intval() neben der direkten Typumwandlung (int) existiert.
Die Funktion bietet gegenüber dem (int)-Type-Casting Vorteile, zum Beispiel durch den base-Parameter für verschiedene Zahlensysteme, oder ein robusteres Verhalten bei einigen Sonderfällen.
2. Die Syntax von intval() im Detail
Bevor du intval() einsetzt, solltest du die exakte Syntax und alle Optionen kennen. Hier sind alle Details zur Funktionssignatur.
2.1. Die offizielle Signatur:
int intval(mixed $wert, int $basis = 10)
2.2. Erklärung jedes Elements:
- Rückgabewert: int – Es wird immer eine Ganzzahl zurückgegeben.
- Parameter $wert: Der zu konvertierende Wert (beliebiger Typ).
- Optionaler Parameter $basis: Die Zahlbasis für Strings (nur bei Stringwerten relevant, Standard ist 10 für das Dezimalsystem).
3. Parameter von intval()
Beide Parameter von intval() haben Einfluss auf das Konvertierungsergebnis. Es lohnt sich, hier genau hinzuschauen.
3.1. $wert (mixed): Der zu konvertierende Wert
intval() akzeptiert als $wert nahezu jeden Datentyp: numerische Werte, Strings, Booleans, Arrays, null und sogar Objekte (mit Einschränkungen).
3.1.1. Welche Datentypen werden akzeptiert?
- Integer und Float: Werden direkt (bzw. mit Trunkierung) übernommen.
- String: Zahlen werden erkannt (inkl. Basen-Präfixe).
- Boolean: true zu 1, false zu 0.
- Array: Leeres Array ergibt 0, nicht-leeres Array ergibt 1.
- null: Immer 0.
- Objekt: Seit PHP 8.0 wird ein E_WARNING ausgegeben, Rückgabe ist 1.
3.2. $basis (int): Die Basis für die Konvertierung
Mit dem Basis-Parameter steuerst du, in welchem Zahlensystem ein String interpretiert wird.
3.2.1. Wann ist der base-Parameter relevant?
Nur bei Strings wird die Basis verwendet. Für Zahlen, Booleans, Arrays usw. hat base keinen Einfluss.
3.2.2. Gültiger Wertebereich für base (2 bis 36).
Du kannst jede Basis von 2 (binär) bis 36 (alphanumerisch) angeben.
3.2.3. Detaillierte Analyse von base = 0:
Wenn du base = 0 verwendest, erkennt intval() das Präfix des Strings und wählt die Basis automatisch:
Präfix | Zahlensystem | Basis | Bemerkung |
0x, 0X | Hexadezimal | 16 | Vorangestelltes 0x/0X |
0b, 0B | Binär | 2 | Vorangestelltes 0b/0B |
0, 0o, 0O | Oktal | 8 | Ab PHP 7.4.0: Nur noch 0o/0O gültig, „0“ als Präfix veraltet |
— | Dezimal | 10 | Standard, wenn kein spezielles Präfix erkannt wird |
Beispiele für jede Präfix-Variante mit base = 0:
$iWertHex = intval('0x1A', 0);
/** ergibt 26 */
$iWertBin = intval('0b1101', 0);
/** ergibt 13 */
$iWertOkt = intval('0o17', 0);
/** ergibt 15 */
$iWertDez = intval('123', 0);
/** ergibt 123 */
4. Rückgabewerte und Verhalten in Spezialfällen
Je nach Eingabe liefert intval() verschiedene Ergebnisse – und es gibt wichtige Spezialfälle zu kennen.
4.1. Standard-Rückgabe: Die Ganzzahl-Repräsentation des $wert.
intval() gibt immer einen Integer zurück, selbst wenn die Eingabe leer, falsch typisiert oder nicht-numerisch ist.
4.2. Verhalten bei Nicht-Standard-Werten:
-
Strings
- Leerer String (''): Rückgabe ist 0.
- String ohne führende Zahl ('abc'): Rückgabe ist 0.
- String mit Zahl und Suffix ('42abc'): Nur die führende Zahl zählt – Rückgabe ist 42.
- String mit führenden Nullen ('007'): Interpretiert als 7 (außer base=0, dann oktal).
- String mit Vorzeichen ('-15', '+8'): Minus- und Pluszeichen werden korrekt erkannt.
-
Floating-Point-Zahlen
- Beispiel: intval(3.99) ergibt 3. Der Nachkommabereich wird abgeschnitten, nicht gerundet.
-
Booleans
- true wird zu 1, false zu 0.
-
Arrays
- Leeres Array ([]): Rückgabe ist 0.
- Nicht-leeres Array: Rückgabe ist 1.
-
null
-
Objekte
- Seit PHP 8.0: E_WARNING, Rückgabe ist 1.
4.3. Umgang mit Integer-Überlauf:
PHP kennt Systemgrenzen für Ganzzahlen (je nach Plattform und Architektur):
- 32-Bit-System: -2.147.483.648 bis 2.147.483.647
- 64-Bit-System: -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
Beispiel Überlauf:
$iZuGross = intval('99999999999999999999');
/** ergibt platformabhängig max. Integer oder float */
5. Praxisnahe Anwendungsbeispiele für intval()
In der Praxis musst du Werte oft in Integer umwandeln – egal ob Benutzereingabe, Konfiguration oder Rückgaben.
5.1. Konvertierung von Gleitkommazahlen
$fZahl = 9.81;
$iErgebnis = intval($fZahl);
/** ergibt 9 */
5.2. Konvertierung von numerischen Strings
$sEingabe = '1234';
$iWert = intval($sEingabe);
/** ergibt 1234 */
5.3. Konvertierung von Strings mit verschiedenen Basen
$sHex = '1a';
$iHex = intval($sHex, 16);
/** ergibt 26 */
$sBin = '1011';
$iBin = intval($sBin, 2);
/** ergibt 11 */
$sOkt = '17';
$iOkt = intval($sOkt, 8);
/** ergibt 15 */
5.4. Konvertierung von Booleans und null
$bFlag = true;
$iAusBoolean = intval($bFlag);
/** ergibt 1 */
$bFlagFalse = false;
$iAusFalse = intval($bFlagFalse);
/** ergibt 0 */
$mNullwert = null;
$iAusNull = intval($mNullwert);
/** ergibt 0 */
5.5. Szenarien mit Arrays und Objekten
$aLeer = [];
$iLeer = intval($aLeer);
/** ergibt 0 */
$aNichtLeer = [1, 2];
$iNichtLeer = intval($aNichtLeer);
/** ergibt 1 */
$oObjekt = new stdClass();
$iObjekt = intval($oObjekt);
/** ergibt 1, ab PHP 8.0 mit Warning */
5.6. Anwendungsfall: Grundlagen der Input-Sanitisierung mit intval()
$sBenutzerEingabe = $_GET['id'];
$iId = intval($sBenutzerEingabe);
/** schützt vor Injection/Fehleingaben */
6. intval() vs. Typumwandlung (int): Ein direkter Vergleich
In PHP kannst du Werte entweder mit intval() oder direkt durch (int) casten. Es gibt aber feine, wichtige Unterschiede.
6.1. Gemeinsamkeiten und grundlegende Unterschiede.
Beide Methoden liefern in Standardfällen dasselbe Ergebnis. Die Unterschiede zeigen sich vor allem bei der Basisangabe und bei Objekten.
6.2. Detaillierte Fallbeispiele:
-
Strings mit Basen
$sHex = '0x1a';
$iA = intval($sHex, 0);
/** ergibt 26 */
$iB = (int)$sHex; /** ergibt 0 */
-
Objekte
$oObjekt = new stdClass();
$iA = intval($oObjekt);
/** ergibt 1 (ab PHP 8.0 E_WARNING) */
// (int)$oObjekt löst einen Fatal Error aus
-
Strings, die nicht mit einer Zahl beginnen
$sText = 'foo123';
$iA = intval($sText);
/** ergibt 0 */
$iB = (int)$sText;
/** ergibt 0 */
6.3. Wann sollte man intval() verwenden und wann ist (int) ausreichend?
- Verwende intval(), wenn du Basen brauchst oder explizite, nachvollziehbare Umwandlung mit Fehlerbehandlung willst.
- Für simple Casts reicht (int).
6.4. Kurzer Hinweis auf Performance-Überlegungen.
(int) ist minimal schneller als intval(), aber der Unterschied ist bei normalen Anwendungen kaum spürbar.
7. Häufige Fallstricke, Fehler und Best Practices
intval() ist robust, aber es gibt typische Stolpersteine, die du kennen solltest.
7.1. Unerwartete Nullen
Wenn ein Wert nicht mit einer Zahl beginnt oder leer ist, gibt intval() 0 zurück – das führt schnell zu unerwarteten Ergebnissen.
7.2. Integer-Überlauf
Sei dir der Grenzen deines Systems bewusst. Überschreiten Werte den maximalen Integer, wird das Ergebnis als float weitergeführt – und das kann zu Bugs führen.
7.3. Nicht-numerische Zeichen in Strings
Die Konvertierung endet am ersten nicht-numerischen Zeichen im String. Das führt manchmal zu überraschend niedrigen Rückgabewerten.
7.4. Debugging-Tipps
Setze vor der Umwandlung auf is_numeric() oder var_dump(), um Typ und Wert zu prüfen. Das erleichtert die Fehlersuche.
8. Verwandte Funktionen und weiterführende Konzepte
Wer mit intval() arbeitet, sollte weitere Typumwandlungen und Checks in PHP kennen.
8.1. floatval()
Konvertiert einen Wert in einen Gleitkommawert (Float).
$fWert = floatval('3.14159');
/** ergibt 3.14159 */
8.2. strval()
Wandelt einen Wert in einen String um.
$sWert = strval(1234);
/** ergibt '1234' */
8.3. boolval()
Erzeugt einen Boolean aus jedem Wert.
$bWert = boolval(0);
/** ergibt false */
8.4. settype()
Ändert den Typ einer Variable direkt.
$mWert = '42';
settype($mWert, 'integer');
/** $mWert ist jetzt int(42) */
8.5. is_numeric()
Prüft, ob ein Wert numerisch ist.
$bIstZahl = is_numeric('123');
/** ergibt true */
8.6. PHP Type Juggling
PHP wechselt Datentypen oft automatisch – das sogenannte „Type Juggling“. Das kann zu unerwarteten Ergebnissen führen, wenn man es nicht versteht.
8.7. BCMath Arbitrary Precision Mathematics Functions
Bei besonders großen Zahlen reicht intval() nicht – dafür gibt es die BCMath-Erweiterung für beliebige Genauigkeit.
9. Fazit: intval() als essentielles Werkzeug in PHP
Die Funktion intval() ist ein mächtiges und sicheres Werkzeug für die Integer-Konvertierung in PHP. Wer die Feinheiten versteht, kann nicht nur typische Fehlerquellen vermeiden, sondern auch den Code robuster und sicherer gestalten. Nutze intval(), wenn du präzise, kontrollierte Typumwandlungen brauchst – besonders bei Benutzereingaben, Konfigurationswerten und API-Rückgaben. Nur so stellst du sicher, dass deine PHP-Anwendungen auch in komplexen Fällen stabil und nachvollziehbar bleiben.