in_array()始终返回TRUE

Ind*_*dex 10 php arrays

$arrValue = array('first', 'second');
$ret = in_array(0, $arrValue);
var_dump($ret);
var_dump($arrValue);
Run Code Online (Sandbox Code Playgroud)

以上示例给出以下结果:

bool(true)
array(2) {
  [0]=> string(5) "first"
  [1]=> string(6) "second"
}
Run Code Online (Sandbox Code Playgroud)

为什么in_array()将针0与任何给定的干草堆相匹配?

Gol*_*rol 18

那是因为该函数使用了非严格的比较.数组中的字符串与整数0进行比较.某些类型转换正在发生数据丢失,两者都被视为相同:

var_dump(0 == 'first'); //  bool(true)
Run Code Online (Sandbox Code Playgroud)

因此,解决此问题,您可以使用第三个参数并将其设置为true以请求严格比较.

$ret = in_array(0, $arrValue, true);
Run Code Online (Sandbox Code Playgroud)

请记住,严格是非常严格的.在严格的比较中,0并不等于"0".

文件:http://nl3.php.net/in_array

  • 所以'0 =='第一''喜欢PHP. (4认同)
  • 查看[PHP,一个糟糕设计的分形](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/)获取更多噩梦燃料.:) (3认同)