W3docs

intval()

La función intval() es una función integrada de PHP que convierte una variable a entero. Es similar a floatval(), que convierte una variable.

Introducción

La función intval() devuelve el valor entero de una variable. Es una de las funciones de conversión de tipos de PHP, junto con floatval(), strval() y boolval(). Se recurre a intval() cuando se tiene un dato que parece un número pero está almacenado como string, float u otro tipo — por ejemplo, un valor obtenido de un formulario, un parámetro de consulta en una URL o un archivo CSV — y se necesita un entero real para contar, indexar o realizar operaciones aritméticas.

Esta página cubre la firma de la función, cómo funciona el parámetro opcional $base, qué sucede con cada tipo de entrada y los errores comunes que suelen ocurrir.

Sintaxis

intval(mixed $value, int $base = 10): int

Acepta hasta dos parámetros y siempre devuelve un int:

  • $value — el valor a convertir. Puede ser un string, float, boolean, null o array.
  • $base (opcional) — la base numérica en la que se interpretará $value. Solo se usa cuando $value es un string; se ignora para cualquier otro tipo. El valor por defecto es 10.

intval() nunca lanza excepciones ni devuelve null. Si no puede encontrar un número para analizar, devuelve 0.

Ejemplo básico

Este es el caso más común — convertir strings con aspecto numérico en enteros, incluyendo bases no decimales:

php— editable, runs on the server

El segundo argumento indica a intval() cómo leer el string. "101010" en base 2 equivale a 42 en decimal, y "2c" en base 16 equivale a 44 en decimal. Un string sin parte numérica inicial, como "not a number", produce 0.

Conversión de tipos que no son string

Cuando se pasa algo que no es un string, intval() sigue las reglas normales de conversión a entero de PHP e ignora $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)
?>

Dos cosas a recordar:

  • Los floats se truncan hacia cero, no se redondean. intval(4.7) es 4, e intval(-4.7) es -4. Si se desea redondear, hay que usar round() primero.
  • Los arrays se convierten a 0 cuando están vacíos y a 1 cuando no lo están — casi nunca es el comportamiento deseado, por lo que no conviene depender de ello.

Cómo se analizan los strings

Para strings, intval() lee la parte numérica inicial y se detiene en el primer carácter que no puede interpretar:

<?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)
?>

Detección automática de base con $base = 0

Si se establece $base en 0, intval() inspecciona el prefijo del string y elige la base automáticamente:

<?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)
?>

Esto resulta útil al analizar valores de configuración que pueden estar escritos en distintas notaciones.

Errores comunes

Literales octales vs. strings octales. Un cero inicial en el código fuente convierte un número en un literal octal antes de que intval() se ejecute, por lo que intval(042) es 34 (porque 042 ya es 34). Sin embargo, el string "042" es 42 en decimal con la base 10 predeterminada. Se recomienda mantener los números como strings si se desea un análisis predecible.

$base no afecta a los no-strings. intval(255, 16) es 255, no 597 — la base se ignora porque 255 ya es un entero. Se debe convertir desde un string si se pretende reinterpretar los dígitos.

Valores fuera de rango. En una plataforma de 64 bits, un valor mayor que PHP_INT_MAX se satura en PHP_INT_MAX en lugar de desbordarse a un número negativo.

Cuándo usar intval() en lugar de alternativas

  • Usar intval() cuando se desee una conversión flexible que devuelva 0 en caso de fallo y pueda leer otras bases.
  • Usar la conversión (int) ((int)$value) para una conversión rápida solo en base decimal; se comporta como intval() con base 10.
  • Usar filter_var($value, FILTER_VALIDATE_INT) cuando se necesite validación — devuelve false para entradas no enteras en lugar de devolver silenciosamente 0, por lo que se puede distinguir un 0 real de un fallo de análisis.

Conclusión

intval() convierte strings, floats, booleanos y otros valores a un entero, con una base opcional para analizar strings en binario, octal, hexadecimal o cualquier base de 2 a 36. Su comportamiento flexible — devolver 0 en caso de fallo y truncar floats — lo hace conveniente, pero esa misma flexibilidad puede ocultar entradas incorrectas, por lo que se prefiere filter_var() cuando realmente se necesita validar. Para las conversiones relacionadas, ver floatval(), strval() y gettype().

Práctica

Práctica
¿Qué hace la función intval() en PHP?
¿Qué hace la función intval() en PHP?
Was this page helpful?