Menu

Conversión de tipos en PHP: string a int, intval() y (int)

Convierte una cadena en entero en PHP con (int) $str o intval($str); (int) "42" es 42 y (int) "12abc" es 12. Aprende los casts a int, float, bool, string y array, las cadenas numéricas, intval con base, settype y cómo validar la entrada en lugar de obtener 0 en silencio.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Para convertir un valor a otro tipo, pon el tipo entre paréntesis delante: (int) "42" da el entero 42. La forma de función intval("42") hace lo mismo. Un cast nunca falla: el texto que no es un número se convierte en 0, y una cadena que empieza por dígitos se queda solo con esos dígitos.

Los casts de PHP son (int), (float), (string), (bool), (array) y (object). Cada uno tiene también una función: intval(), floatval(), strval(), boolval().

De string a int: qué devuelven (int) e intval()

PHP lee los dígitos desde el principio de la cadena, tras saltarse los espacios iniciales, y se detiene en el primer carácter que no encaja en un número. La notación con exponente cuenta como número; el prefijo 0x, no.

Fíjate en que "12.7" se convierte en 12: convertir a int corta la parte decimal, no redondea. Ni (int) ni intval() imprimen un warning aquí, sea cual sea la entrada.

intval() con base

intval($value, $base) lee la cadena en otro sistema de numeración. Con base 0, PHP mira el prefijo: 0x para hexadecimal, 0b para binario y un 0 inicial para octal.

De float a int: truncar, no redondear

(int) descarta todo lo que hay tras el punto decimal, hacia cero. Redondea antes si quieres el entero más cercano, y cuidado con los paréntesis:

La última pareja es la trampa clásica de los floats: (0.1 + 0.7) * 10 se guarda como 7.999999..., así que truncar da 7. Redondear primero da 8. La página de matemáticas explica round, floor y ceil.

Convertir a bool, string y array

A bool, solo unos pocos valores se convierten en false: 0, 0.0, "", "0", null y []. Todo lo demás es true, incluidos "0.0", " " y "false".

A string, true se convierte en "1", mientras que false y null se convierten los dos en "". Los floats pierden un .0 final, y los floats muy grandes o muy pequeños usan notación con exponente.

Convertir un array a cadena no lo une. Esto imprime Tags: Array:

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

y PHP añade un warning:

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

Usa implode(", ", $array) o json_encode($array) para convertir un array en texto.

Todos los casts de un vistazo

Elige un valor para ver qué devuelven intval, (bool), strval, is_numeric y gettype con él. Cada celda la calculó PHP 8.3.

intval, (bool), strval e is_numeric para cada valor de $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.

Cadenas numéricas y conversión automática

Una cadena numérica es una cadena que parece un número: "12", "-3.5", "1e3", con espacios opcionales alrededor. PHP las convierte automáticamente en las operaciones aritméticas, y is_numeric() te dice si una cadena lo es.

"12abc" + 1 sigue dando 13, pero PHP 8 imprime Warning: A non-numeric value encountered, y "abc" + 1 lanza un TypeError. Convierte o valida antes de hacer aritmética con la entrada del usuario.

settype() y gettype()

settype() cambia el tipo de una variable en el sitio y gettype() lo indica. get_debug_type() devuelve los nombres más cortos que ves en los mensajes de error (int, float, string).

La mayoría del código usa un cast ($value = (int) $value;), porque es más corto y se lee igual.

Validar la entrada en lugar de convertirla

(int) nunca dice que no, así que (int) "abc" se convierte en silencio en 0 y (int) "5 apples" en 5. Para la entrada de formularios, usa filter_var con FILTER_VALIDATE_INT: devuelve el entero o false.

Compara el resultado con === false, porque 0 es un entero válido y == false lo rechazaría. La página de filter_var muestra rangos y otros validadores.

Preguntas frecuentes

¿Cómo convierto una cadena en un int en PHP?

Usa (int) $str o intval($str); en base 10 los dos dan el mismo resultado. (int) "42" es 42, (int) "12abc" es 12 y (int) "abc" es 0. Para rechazar una entrada que no sea un número entero, usa filter_var($str, FILTER_VALIDATE_INT), que devuelve false en lugar de adivinar.

¿Cuál es la diferencia entre intval() y (int) en PHP?

En base 10 devuelven el mismo resultado. intval() además acepta una base: intval('ff', 16) es 255, y con base 0 lee prefijos como 0x, 0b y un 0 inicial para octal. Al ser una función, intval también se puede pasar como callback, como en array_map('intval', $values).

¿Qué devuelve (bool) "0" en PHP?

false. La cadena "0" es uno de los valores falsy de PHP, junto con "", 0, 0.0, null y []. Cualquier otra cadena es true, incluidas "0.0", " " y "false".

¿Cómo convierto un número en cadena en PHP?

Usa (string) $n, strval($n) o mételo en una cadena: "$n". (string) 3.0 es "3"; para un número fijo de decimales usa number_format($n, 2) o sprintf('%.2f', $n).

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR