Menu

Conversão de tipos PHP: string para int, intval() e (int)

Converta uma string PHP em inteiro com (int) $str ou intval($str); (int) "42" é 42 e (int) "12abc" é 12. Veja casts para int, float, bool, string e array, strings numéricas, intval com base, settype e como validar a entrada em vez de receber 0 em silêncio.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Para converter um valor para outro tipo, coloque o tipo entre parênteses antes dele: (int) "42" dá o inteiro 42. A forma de função intval("42") faz o mesmo. O cast nunca falha: texto que não é número vira 0, e uma string que começa com dígitos fica só com esses dígitos.

Os casts do PHP são (int), (float), (string), (bool), (array) e (object). Cada um também tem uma função: intval(), floatval(), strval(), boolval().

String para int: o que (int) e intval() retornam

O PHP lê dígitos do início da string, depois de pular espaços iniciais, e para no primeiro caractere que não se encaixa num número. Notação com expoente conta como número, um prefixo 0x não.

Repare que "12.7" vira 12: o cast para int corta a parte fracionária, não arredonda. Nem (int) nem intval() imprimem aviso aqui, qualquer que seja a entrada.

intval() com base

intval($value, $base) lê a string em outro sistema numérico. Com base 0, o PHP olha o prefixo: 0x para hexadecimal, 0b para binário, um 0 inicial para octal.

Float para int: truncamento, não arredondamento

(int) descarta tudo depois do ponto decimal, em direção ao zero. Arredonde antes se quiser o inteiro mais próximo, e preste atenção aos parênteses:

O último par é a armadilha clássica dos floats: (0.1 + 0.7) * 10 é guardado como 7.999999..., então truncar dá 7. Arredondar antes dá 8. A página de matemática explica round, floor e ceil.

Cast para bool, string e array

Para bool, só alguns valores viram false: 0, 0.0, "", "0", null e []. Todo o resto é true, incluindo "0.0", " " e "false".

Para string, true vira "1", enquanto false e null viram "". Floats perdem o .0 final, e floats muito grandes ou muito pequenos usam notação com expoente.

Fazer cast de um array para string não junta os elementos. Isto imprime Tags: Array:

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

e o PHP adiciona um aviso:

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

Use implode(", ", $array) ou json_encode($array) para transformar um array em texto.

Todos os casts num relance

Escolha um valor para ver o que intval, (bool), strval, is_numeric e gettype retornam para ele. Cada célula foi calculada pelo 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.

Strings numéricas e conversão automática

Uma string numérica é uma string que parece um número: "12", "-3.5", "1e3", com espaços opcionais em volta. O PHP converte essas strings automaticamente em aritmética, e is_numeric() diz se uma string se qualifica.

"12abc" + 1 ainda dá 13, mas o PHP 8 imprime Warning: A non-numeric value encountered, e "abc" + 1 lança um TypeError. Faça cast ou valide antes de fazer contas com a entrada do usuário.

settype() e gettype()

settype() muda o tipo de uma variável no lugar e gettype() informa o tipo. get_debug_type() retorna os nomes mais curtos que você vê nas mensagens de erro (int, float, string).

A maior parte do código usa um cast ($value = (int) $value;), porque é mais curto e se lê do mesmo jeito.

Valide a entrada em vez de fazer cast

(int) nunca diz não, então (int) "abc" vira 0 em silêncio e (int) "5 apples" vira 5. Para entrada de formulário, use filter_var com FILTER_VALIDATE_INT: ele retorna o inteiro ou false.

Compare o resultado com === false, porque 0 é um inteiro válido e == false o rejeitaria. A página sobre filter_var mostra intervalos e outros validadores.

Perguntas frequentes

Como converto uma string em int no PHP?

Use (int) $str ou intval($str); os dois dão o mesmo resultado na base 10. (int) "42" é 42, (int) "12abc" é 12 e (int) "abc" é 0. Para rejeitar uma entrada que não é um número inteiro, use filter_var($str, FILTER_VALIDATE_INT), que retorna false em vez de adivinhar.

Qual a diferença entre intval() e (int) no PHP?

Na base 10 eles retornam o mesmo resultado. intval() também aceita uma base: intval('ff', 16) é 255, e com base 0 ele lê prefixos como 0x, 0b e um 0 inicial para octal. Por ser uma função, intval também pode ser passada como callback, como em array_map('intval', $values).

O que (bool) "0" retorna no PHP?

false. A string "0" é um dos valores falsos do PHP, junto com "", 0, 0.0, null e []. Todas as outras strings são true, incluindo "0.0", " " e "false".

Como converto um número em string no PHP?

Use (string) $n, strval($n) ou coloque-o numa string: "$n". (string) 3.0 é "3"; para um número fixo de casas decimais, use number_format($n, 2) ou sprintf('%.2f', $n).

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR