He estado leyendo las respuestas y no vi a nadie mencionar la mayor advertencia en la conversión de números de PHP.
La respuesta más votada sugiere hacer lo siguiente:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
Eso es brillante. PHP hace casting directo. Pero, ¿y si hiciéramos lo siguiente?
$str = "3.14is_trash"
$intstr = (int)$str
¿PHP considera válidas tales conversiones?
Aparentemente si .
PHP lee la cadena hasta que encuentra el primer carácter no numérico para el tipo requerido. Lo que significa que para los enteros, los caracteres numéricos son [0-9]. Como resultado, se lee 3
, ya que está en el rango de caracteres [0-9], continúa leyendo. Lee.
y se detiene allí ya que no está en el rango [0-9].
Lo mismo sucedería si lanzaras para flotar o duplicar. PHP leería 3
, luego .
, luego 1
, luego 4
, y se detendría i
ya que no es un carácter numérico flotante válido.
Como resultado, se "million" >= 1000000
evalúa como falso, pero se "1000000million" >= 1000000
evalúa como true
.
Ver también:
https://www.php.net/manual/en/language.operators.comparison.php cómo se realizan las conversiones al comparar
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion cómo las cadenas se convierten en números respectivos