Comparación de cadenas con números enteros: explicación de fenómenos poco comunes
En PHP, comparar cadenas con números enteros a veces puede producir resultados extravagantes. Esta confusión surge del comportamiento de comparación flexible de PHP, específicamente cuando se comparan cadenas con el valor 0.
Considere el siguiente código:
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?";
Sorprendentemente, el resultado de este código es:
Test 1 is Equal!?
¿Por qué ocurre esto? ?
Según la documentación PHP sobre conversión de cadenas a números, cuando una cadena se evalúa en un contexto numérico (como una comparación), se convierte a un flotante o un número entero según su contenido. Si la cadena contiene caracteres como '.', 'e' o 'E', se trata como un flotante. De lo contrario, se considera un número entero.
En el caso de $test1, la cadena no contiene ningún carácter numérico y por lo tanto se convierte al valor entero 0. Es por eso que la comparación $test1 == 0 evalúa a verdadero.
¿Por qué $test2 no funciona?
$test2 también comienza con caracteres no numéricos, entonces, ¿por qué no? ¿También es igual a 0? Esto se debe a que la cadena contiene el carácter '3' al principio. Según la documentación de PHP, un número válido comienza con un signo (opcional) seguido de dígitos. Por lo tanto, $test2 se convierte en un flotante con un valor de 0, y la comparación $test2 == 0 se evalúa como falsa.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3