lanxi256 发表于 2018-12-17 14:26:51

PHP5.3中 in_array()的一个坑

  因排查问题,发现目前生产环境的PHP版本5.3中有这个问题:
  
  //php5.3
  
  echo PHP_INT_MAX;
  
  $str = "114100007160061630632";
  $arr = array("114100007160061630631");
  
  var_dump(in_array($str,$arr));
  
  echo 'PHP:' .phpversion();
  
  exit;
  
  对于纯数字的非严格比较,因超出Int最大值,5.3中给出的是结果是 true.
  5.5中验证是已经修复的.
  
  解决方案:
  可以添加第三个参数,严格比较。
  var_dump(in_array($str,$arr, true));
  
  但是严格比较请注意带来的新的问题:比方说 var_dump(in_array(1, array('1'), true))结果是false,是否影响原有程序
  
  参考文档:
  http://php.net/manual/zh/function.in-array.php
  http://php.net/manual/zh/language.types.integer.php
  http://php.net/manual/zh/types.comparisons.php
  
  大家可以自己关注下。
  




页: [1]
查看完整版本: PHP5.3中 in_array()的一个坑