当加号涉及时,php找到结果

时间:2014-01-06 22:51:31

标签: php

我有一行扫描数据集的代码:

数据集:

+117251093918
+1174418217128
0112347063455555

php代码行:

 if (substr($row['someData'],0,3) == "011")
 {
    //do stuff
 }

+117251093918
+1174418217128
0112347063455555

我希望在这个数据集中找到1个结果,但是根据php找到所有3个结果。有什么想法为什么?

2 个答案:

答案 0 :(得分:3)

如果您想确保比较双方的字符串,请使用三元组=

 if (substr($row['someData'],0,3) === "011")

那样php就不会转换任何变量类型来使比较工作;内容和变量类型现在必须相同。

在您的情况下,双方都转换为整数,请参阅following example

 var_dump("+11" == "011");

返回true

this example

var_dump("+11" === "011");

返回false

查看manual了解详情。

答案 1 :(得分:0)

您应该使用===。如果==运算符执行“类型安全比较”,则运算符===会在两种不同类型之间进行转换。这意味着如果两个操作数具有相同的类型和相同的值,它将仅返回true。

在下面的示例中,第一个for循环显示了它返回good的原因。 ===表示类型安全比较,这意味着除非两个值具有相同的类型并且相等,否则它将返回false。然而,无论类型如何,==都返回true,它必须是相等的。

<?php

// assume your row['somedata'] is this
$r = +11;

 //returns good
 if ((substr($r,0,3)) == "+11")
 {
    echo "Good";
 }

 //doesn't return any
 if ((substr($r,0,3)) === "+11")
 {
    echo "Good One";
 }

 ?>