使用if语句时,字符串被视为数字

时间:2015-04-30 09:20:00

标签: php

我使用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);
    }

2 个答案:

答案 0 :(得分:6)

每个字符将比较字符串。数字的价值。所以字符串不同,数字也相等。对于类型正确性,使用===检查值是否相同,如果它们相等则为==(例如数字)

<?php
  var_dump("0000005" == "000005");
  var_dump("0000005" === "000005");
?>
  

BOOL(真)   布尔(假)

答案 1 :(得分:1)

改为使用Identical ===运营商。使用===时,它不会转换值并且会匹配精确值。试试 -

 if ($params['barcode_old'] === $params['barcode_new']) {
  

如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于switch语句。当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值。