W3docs

intval()

La fonction intval() est une fonction intégrée en PHP qui convertit une variable en entier, similaire à floatval() qui convertit une variable.

Introduction

La fonction intval() retourne la valeur entière d'une variable. C'est l'une des fonctions de conversion de type de PHP, aux côtés de floatval(), strval() et boolval(). On utilise intval() quand on dispose de données qui ressemblent à un nombre mais sont stockées sous forme de chaîne, de flottant ou d'un autre type — par exemple une valeur issue d'un formulaire, d'un paramètre de requête URL ou d'un fichier CSV — et qu'on a besoin d'un vrai entier pour compter, indexer ou effectuer des calculs.

Cette page couvre la signature de la fonction, le fonctionnement du paramètre optionnel $base, le comportement avec chaque type d'entrée, ainsi que les pièges courants.

Syntaxe

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

Elle accepte jusqu'à deux paramètres et retourne toujours un int :

  • $value — la valeur à convertir. Il peut s'agir d'une chaîne, d'un flottant, d'un boolean, de null ou d'un array.
  • $base (optionnel) — la base numérique dans laquelle interpréter $value. Elle n'est utilisée que lorsque $value est une chaîne ; elle est ignorée pour tout autre type. La valeur par défaut est 10.

intval() ne lève jamais d'exception et ne retourne jamais null. Si elle ne trouve pas de nombre à analyser, elle retourne 0.

Exemple de base

Voici le cas le plus courant — transformer des chaînes à apparence numérique en entiers, y compris avec des bases non décimales :

php— editable, runs on the server

Le deuxième argument indique à intval() comment lire la chaîne. "101010" en base 2 vaut 42 en décimal, et "2c" en base 16 vaut 44 en décimal. Une chaîne sans partie numérique initiale, comme "not a number", produit 0.

Conversion de types non-chaîne

Quand on passe autre chose qu'une chaîne, intval() suit les règles normales de transtypage entier de PHP et ignore $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)
?>

Deux points à retenir :

  • Les flottants sont tronqués vers zéro, pas arrondis. intval(4.7) vaut 4, et intval(-4.7) vaut -4. Si vous souhaitez arrondir, utilisez d'abord round().
  • Les arrays se convertissent en 0 lorsqu'ils sont vides et en 1 lorsqu'ils ne le sont pas — ce n'est presque jamais ce qu'on attend, donc ne comptez pas dessus.

Comment les chaînes sont analysées

Pour les chaînes, intval() lit la partie numérique initiale et s'arrête au premier caractère qu'elle ne peut pas interpréter :

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

Détection automatique de la base avec $base = 0

Si vous définissez $base à 0, intval() examine le préfixe de la chaîne et choisit automatiquement 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)
?>

C'est pratique pour analyser des valeurs de configuration qui peuvent être écrites dans différentes notations.

Pièges courants

Littéraux octaux vs. chaînes octales. Un zéro initial dans le code source rend un nombre octal avant même que intval() soit appelée, donc intval(042) vaut 34 (car 042 est déjà 34). Mais la chaîne "042" vaut 42 en décimal avec la base par défaut 10. Conservez les nombres sous forme de chaînes si vous souhaitez un traitement prévisible.

$base n'a aucun effet sur les non-chaînes. intval(255, 16) vaut 255, pas 597 — la base est ignorée car 255 est déjà un entier. Convertissez depuis une chaîne si vous souhaitez réinterpréter les chiffres.

Valeurs hors plage. Sur une plateforme 64 bits, une valeur supérieure à PHP_INT_MAX sature à PHP_INT_MAX plutôt que de déborder vers un nombre négatif.

Quand utiliser intval() vs. les alternatives

  • Utilisez intval() quand vous voulez une conversion tolérante qui retourne 0 en cas d'échec et peut lire d'autres bases.
  • Utilisez le transtypage (int) ((int)$value) pour un transtypage rapide en base décimale ; il se comporte comme intval() avec la base 10.
  • Utilisez filter_var($value, FILTER_VALIDATE_INT) quand vous avez besoin d'une validation — il retourne false pour une entrée non entière au lieu de donner silencieusement 0, ce qui vous permet de distinguer un vrai 0 d'un échec d'analyse.

Conclusion

intval() convertit des chaînes, des flottants, des booleans et d'autres valeurs en entier, avec une base optionnelle pour analyser des chaînes en binaire, octal, hexadécimal ou tout radix de 2 à 36. Son comportement tolérant — retourner 0 en cas d'échec et tronquer les flottants — le rend pratique, mais cette même tolérance peut masquer des entrées incorrectes. Préférez donc filter_var() quand vous avez réellement besoin de valider. Pour les conversions associées, consultez floatval(), strval() et gettype().

Pratique

Pratique
Que fait la fonction intval() en PHP ?
Que fait la fonction intval() en PHP ?
Was this page helpful?