【问题标题】:in_array() always returns TRUE [duplicate]in_array() 始终返回 TRUE [重复]
【发布时间】:2014-07-07 07:01:38
【问题描述】:
$arrValue = array('first', 'second');
$ret = in_array(0, $arrValue);
var_dump($ret);
var_dump($arrValue);

上面的例子给出了以下结果:

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

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

【问题讨论】:

  • 查看第一条评论:nl1.php.net/in_arrayin_array 函数中添加第三个参数true 将检查设置为严格。
  • 0 == '第一'; 0 !== '第一';
  • 你几乎必须对 in_array 使用严格相等,这是我得出的结论,否则你会遇到这样的情况: echo in_array('test',['fail' =>真的]) ? '哎呀':''

标签: php arrays


【解决方案1】:

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

var_dump(0 == 'first'); //  bool(true)

所以解决这个问题,你可以使用第三个参数并将其设置为true来请求严格比较。

$ret = in_array(0, $arrValue, true);

请记住,严格就是严格。严格比较,0 不等于"0"

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

【讨论】:

  • 所以0 == 'first' 爱上了 PHP。
  • @Loïc: thisthis 更好。
  • 是的,您可能希望0 被类型转换为"0",而不是"first" 被类型转换为0,但这不是它的工作原理。实际上,我们应该庆幸"first" 没有被类型转换为"1""second"2。 ;)
  • 是的,只是一个小问题..(所以(int)字符串== 0;好的..)thx :-)
  • 查看PHP, a fractal of bad design 了解更多噩梦燃料。:)
【解决方案2】:

基本上这里 0 被视为 false,因此搜索将像函数 in_array 在您的数组值之间搜索 false 一样发生。 Make it(0) 字符串以获得不同的输出。 由于 php 支持严格或非严格比较,因此您需要传递第三个值 true 它告诉它是严格的,因为默认情况下它是非严格的。

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2014-06-25
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多