我使用if语句将2个变量相互比较,主要是在这种情况下条形码。我注意到他们是否以零为首,唯一的区别是一个变量在开头是更多的零,其余的是相同的,它给出一个真实的结果,好像它们是相同的,这是INT / NUMBER格式,这将是真的,但是我已经检查过并且两者都是字符串,因此无法理解为什么它认为“000005”和“0000005”在它们不相同时是相同的。
echo "<pre>";
$params['barcode_new'] = "0000005";
$params['barcode_old'] = "000005";
echo "var type : " .gettype($params['barcode_new']) ."<br>";
if ($params['barcode_old'] == $params['barcode_new']) {
echo "Master barcode already set to {$params['barcode_new']} <br>";
print_r($params);
}
答案 0 :(得分:6)
每个字符将比较字符串。数字的价值。所以字符串不同,数字也相等。对于类型正确性,使用===
检查值是否相同,如果它们相等则为==(例如数字)
<?php
var_dump("0000005" == "000005");
var_dump("0000005" === "000005");
?>
BOOL(真) 布尔(假)
答案 1 :(得分:1)
改为使用Identical
===
运营商。使用===
时,它不会转换值并且会匹配精确值。试试 -
if ($params['barcode_old'] === $params['barcode_new']) {
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于switch语句。当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值。