2

在 PHP 中,有没有办法阻止它评估两个字符串“1”和“1.0”相同?下面的代码说明了我在说什么:

<?php
    $str1 = "1";
    $str2 = "1.0";

    if($str1==$str2){
      echo "equal";
    }else{
      echo "not equal";
    }
?>

对我来说,问题是我试图检查用户在将值提交回服务器时是否更改了值。目前,如果用户将值从“1”更改为“1.0”,它应该会发现他们已经更改了记录并允许他们将其保存到数据库中 - 但是因为 PHP 在比较时将它们都作为数字评估他们认为用户没有进行任何更改并且不允许他们保存它。

有没有办法解决?

4

4 回答 4

8

您可以随时使用

===

操作员。

于 2013-04-15T13:33:38.347 回答
6

来自PHP 文档

如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式进行比较。[...]。当比较是 === 或 !== 时不会发生类型转换,因为这涉及比较类型和值。

因此,==运算符进行了导致1等于的数字转换1.0。如果您改用===运算符,则将字符串的每个字符与字符串的另一个对应字符进行比较,从而进行逐个字符比较"1",并"1.0"成为两个不同的字符串,因此评估为假。

于 2013-04-15T13:39:30.140 回答
2

为了避免问题使用

=== 

代替

==
于 2013-04-15T13:35:11.450 回答
2

如果要严格比较字符串,请使用strcmp()

if (strcmp($str1, $str2) == 0) {
    // they're the same
}

当然,这更冗长,但是===已经很好地讨论了使用的替代方法。

于 2013-04-15T13:37:02.360 回答