W3docs

intval()

La funzione intval() è una funzione integrata in PHP che converte una variabile in un intero, simile a floatval() per i numeri in virgola mobile.

Introduzione

La funzione intval() restituisce il valore intero di una variabile. È una delle funzioni di conversione di tipo di PHP, insieme a floatval(), strval() e boolval(). Si ricorre a intval() quando si hanno dati che sembrano un numero ma sono memorizzati come stringa, float o altro tipo — ad esempio un valore proveniente da un form, un parametro query URL o un file CSV — e si ha bisogno di un intero reale per contare, indicizzare o eseguire operazioni aritmetiche.

Questa pagina illustra la firma della funzione, come funziona il parametro opzionale $base, cosa accade con ciascun tipo di input e le insidie più comuni.

Sintassi

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

Accetta fino a due parametri e restituisce sempre un int:

  • $value — il valore da convertire. Può essere una stringa, un float, un boolean, null o un array.
  • $base (opzionale) — la base numerica in cui interpretare $value. Viene usata solo quando $value è una stringa; viene ignorata per qualsiasi altro tipo. Il valore predefinito è 10.

intval() non genera mai eccezioni e non restituisce mai null. Se non riesce a trovare un numero da analizzare, restituisce 0.

Esempio di base

Ecco il caso più comune — trasformare stringhe numeriche in interi, incluse basi non decimali:

php— editable, runs on the server

Il secondo argomento indica a intval() come leggere la stringa. "101010" in base 2 corrisponde al decimale 42, e "2c" in base 16 corrisponde al decimale 44. Una stringa priva di parte numerica iniziale, come "not a number", produce 0.

Conversione di tipi non-stringa

Quando si passa qualcosa di diverso da una stringa, intval() segue le normali regole di cast intero di 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)
?>

Due cose da ricordare:

  • I float vengono troncati verso lo zero, non arrotondati. intval(4.7) è 4 e intval(-4.7) è -4. Se si desidera l'arrotondamento, usare prima round().
  • Gli array si convertono in 0 se vuoti e in 1 se non vuoti — quasi mai quello che si vuole, quindi non fare affidamento su questo comportamento.

Come vengono analizzate le stringhe

Per le stringhe, intval() legge la parte numerica iniziale e si ferma al primo carattere che non riesce a interpretare:

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

Rilevamento automatico della base con $base = 0

Se si imposta $base a 0, intval() esamina il prefisso della stringa e sceglie automaticamente la base:

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

Questo è utile quando si analizzano valori di configurazione che possono essere scritti in notazioni diverse.

Insidie comuni

Letterali ottali vs. stringhe ottali. Uno zero iniziale nel codice sorgente trasforma un numero in un letterale ottale prima ancora che intval() venga eseguito, quindi intval(042) è 34 (perché 042 vale già 34). Ma la stringa "042" in base 10 predefinita è il decimale 42. Mantenere i numeri come stringhe se si desidera un'analisi prevedibile.

$base non fa nulla per i non-stringa. intval(255, 16) è 255, non 597 — la base viene ignorata perché 255 è già un intero. Convertire da una stringa se si intende reinterpretare le cifre.

Valori fuori intervallo. Su una piattaforma a 64 bit, un valore maggiore di PHP_INT_MAX viene saturato a PHP_INT_MAX anziché andare in overflow verso un numero negativo.

Quando usare intval() rispetto alle alternative

  • Usare intval() quando si vuole una conversione tollerante che restituisce 0 in caso di errore e può leggere altre basi.
  • Usare il cast (int) ((int)$value) per un cast rapido solo in base decimale; si comporta come intval() con base 10.
  • Usare filter_var($value, FILTER_VALIDATE_INT) quando si ha bisogno di validazione — restituisce false per input non intero invece di restituire silenziosamente 0, così è possibile distinguere un vero 0 da un errore di analisi.

Conclusione

intval() converte stringhe, float, boolean e altri valori in un intero, con una base opzionale per analizzare stringhe in binario, ottale, esadecimale o qualsiasi radice da 2 a 36. Il suo comportamento tollerante — restituire 0 in caso di errore e troncare i float — lo rende conveniente, ma quella stessa tolleranza può nascondere input errati, quindi preferire filter_var() quando si ha effettivamente bisogno di validare. Per le conversioni correlate, vedere floatval(), strval() e gettype().

Esercizio

Pratica
Cosa fa la funzione intval() in PHP?
Cosa fa la funzione intval() in PHP?
Was this page helpful?