PHP Version 5.3.10 结果是true

解决方案 »

  1.   

    $result = in_array($a, $b, true);
      

  2.   

    $a = '9900000020000004';
    $b = array('2809083640000001','9900000020000002','9900000020000003');在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的。
    因$a 与 $b内元素都可以转换为数字,因此php会对字符串转成数字再进行比较,因为整型范围会溢出,因此会转换成浮点型(float)var_dump(9900000020000004);
    var_dump(9900000020000002);
    var_dump(9900000020000003);
    9900000020000004 与 9900000020000002,9900000020000003 的浮点数相同,都是float(9.90000002E+15)
    因此in_array返回true。如果不想php转换类型比较,用in_array($a, $b, true);可解决此问题。
      

  3.   

    #10 var_dump(9900000020000004);
    var_dump(9900000020000002);
    var_dump(9900000020000003); 这三个打印出来的确实都是:float(9.90000002E+15)
    但是我打印$a = '9900000020000004';
    $b = array('2809083640000001','9900000020000002','9900000020000003');
    $result = in_array($a, $b);
    var_dump($result); 结果是  bool(false);   php 5.4测试。