我有一行扫描数据集的代码:
数据集:
+117251093918
+1174418217128
0112347063455555
php代码行:
if (substr($row['someData'],0,3) == "011")
{
//do stuff
}
+117251093918
+1174418217128
0112347063455555
我希望在这个数据集中找到1个结果,但是根据php找到所有3个结果。有什么想法为什么?
答案 0 :(得分:3)
如果您想确保比较双方的字符串,请使用三元组=
:
if (substr($row['someData'],0,3) === "011")
那样php就不会转换任何变量类型来使比较工作;内容和变量类型现在必须相同。
在您的情况下,双方都转换为整数,请参阅following example:
var_dump("+11" == "011");
返回true
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";
}
?>