Menu

Type casting PHP: da stringa a int, intval() e (int)

Converti una stringa PHP in intero con (int) $str o intval($str); (int) "42" vale 42 e (int) "12abc" vale 12. Impara i cast a int, float, bool, string e array, le stringhe numeriche, intval con una base, settype e come validare l'input invece di ottenere 0 in silenzio.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Per convertire un valore in un altro tipo, metti il tipo tra parentesi davanti al valore: (int) "42" dà l'intero 42. La forma a funzione intval("42") fa lo stesso. Il cast non fallisce mai: il testo che non è un numero diventa 0, e una stringa che inizia con delle cifre mantiene solo quelle cifre.

I cast di PHP sono (int), (float), (string), (bool), (array) e (object). Ognuno ha anche una funzione: intval(), floatval(), strval(), boolval().

Da stringa a int: cosa restituiscono (int) e intval()

PHP legge le cifre dall'inizio della stringa, dopo aver saltato gli spazi iniziali, e si ferma al primo carattere che non fa parte di un numero. La notazione esponenziale conta come numero, un prefisso 0x no.

Nota che "12.7" diventa 12: il cast a int taglia la parte decimale, non arrotonda. Né (int) né intval() stampano qui un warning, qualunque sia l'input.

intval() con una base

intval($value, $base) legge la stringa in un altro sistema di numerazione. Con base 0, PHP guarda il prefisso: 0x per l'esadecimale, 0b per il binario, uno 0 iniziale per l'ottale.

Da float a int: troncamento, non arrotondamento

(int) scarta tutto ciò che segue il punto decimale, verso lo zero. Arrotonda prima se vuoi l'intero più vicino, e fai attenzione alle parentesi:

L'ultima coppia è la classica trappola dei float: (0.1 + 0.7) * 10 viene memorizzato come 7.999999..., quindi troncando ottieni 7. Arrotondando prima ottieni 8. La pagina sulla matematica tratta round, floor e ceil.

Cast a bool, string e array

In bool, solo una manciata di valori diventa false: 0, 0.0, "", "0", null e []. Tutto il resto è true, compresi "0.0", " " e "false".

In string, true diventa "1", mentre false e null diventano entrambi "". I float perdono lo .0 finale, e quelli molto grandi o molto piccoli usano la notazione esponenziale.

Fare il cast di un array a stringa non lo unisce. Questo stampa Tags: Array:

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

e PHP aggiunge un warning:

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

Usa implode(", ", $array) o json_encode($array) per trasformare un array in testo.

Tutti i cast in un colpo d'occhio

Scegli un valore per vedere cosa restituiscono intval, (bool), strval, is_numeric e gettype. Ogni cella è stata calcolata da PHP 8.3.

intval, (bool), strval e is_numeric per ogni valore di $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.

Stringhe numeriche e conversione automatica

Una stringa numerica è una stringa che sembra un numero: "12", "-3.5", "1e3", con eventuali spazi attorno. PHP le converte automaticamente nei calcoli, e is_numeric() ti dice se una stringa lo è.

"12abc" + 1 dà ancora 13, ma PHP 8 stampa Warning: A non-numeric value encountered, e "abc" + 1 lancia un TypeError. Fai un cast o valida prima di fare calcoli sull'input dell'utente.

settype() e gettype()

settype() cambia il tipo di una variabile sul posto e gettype() lo riporta. get_debug_type() restituisce i nomi più brevi che vedi nei messaggi di errore (int, float, string).

La maggior parte del codice usa invece un cast ($value = (int) $value;), perché è più breve e si legge allo stesso modo.

Validare l'input invece di fare il cast

(int) non dice mai di no, quindi (int) "abc" diventa 0 in silenzio e (int) "5 apples" diventa 5. Per l'input dei form, usa filter_var con FILTER_VALIDATE_INT: restituisce l'intero oppure false.

Confronta il risultato con === false, perché 0 è un intero valido e == false lo rifiuterebbe. La pagina su filter_var mostra gli intervalli e gli altri validatori.

Domande frequenti

Come converto una stringa in int in PHP?

Usa (int) $str oppure intval($str); in base 10 danno lo stesso risultato. (int) "42" vale 42, (int) "12abc" vale 12 e (int) "abc" vale 0. Per rifiutare un input che non è un numero intero, usa filter_var($str, FILTER_VALIDATE_INT), che restituisce false invece di tirare a indovinare.

Qual è la differenza tra intval() e (int) in PHP?

In base 10 restituiscono lo stesso risultato. intval() accetta anche una base: intval('ff', 16) vale 255, e con base 0 legge prefissi come 0x, 0b e uno 0 iniziale per l'ottale. Essendo una funzione, intval si può anche passare come callback, come in array_map('intval', $values).

Cosa restituisce (bool) "0" in PHP?

false. La stringa "0" è uno dei valori falsy di PHP, insieme a "", 0, 0.0, null e []. Ogni altra stringa è true, compresi "0.0", " " e "false".

Come converto un numero in stringa in PHP?

Usa (string) $n, strval($n) oppure mettilo in una stringa: "$n". (string) 3.0 vale "3"; per un numero fisso di decimali usa number_format($n, 2) o sprintf('%.2f', $n).

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA