W3docs

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): int

Die 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, null oder ein Array handeln.
  • $base (optional) — die numerische Basis, in der $value interpretiert werden soll. Sie wird nur verwendet, wenn $value ein String ist; bei jedem anderen Typ wird sie ignoriert. Der Standardwert ist 10.

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:

php— editable, runs on the server

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) ergibt 4 und intval(-4.7) ergibt -4. Wenn Runden gewünscht ist, sollte zuerst round() verwendet werden.
  • Arrays werden zu 0 konvertiert, wenn sie leer sind, und zu 1, 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 Fehler 0 zurückgibt und andere Basen lesen kann.
  • (int)-Casting ((int)$value) für eine schnelle Dezimal-Konvertierung; verhält sich wie intval() mit Basis 10.
  • filter_var($value, FILTER_VALIDATE_INT) verwenden, wenn Validierung benötigt wird — es gibt false für Nicht-Integer-Eingaben zurück, anstatt stillschweigend 0 zu liefern, sodass eine echte 0 von 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().

Übung

Übung
Was macht die intval()-Funktion in PHP?
Was macht die intval()-Funktion in PHP?
Was this page helpful?