Php in_数组()不起作用
为什么这是真的Php in_数组()不起作用,php,arrays,Php,Arrays,为什么这是真的 $needle = TRUE; $haystack = array('that', 'this'); print in_array($needle, $haystack); // 1 编辑:我知道可以在_array()中传递严格参数来检查类型。我想知道为什么会显示我显示的行为。当进行松散比较时(即忽略类型),PHP中的任何非空字符串都等于TRUE。您可以通过以下操作进行测试: var_dump('this' == TRUE); var_dump('that' == TRUE)
$needle = TRUE;
$haystack = array('that', 'this');
print in_array($needle, $haystack); // 1
编辑:我知道可以在_array()中传递
严格参数来检查类型。我想知道为什么会显示我显示的行为。当进行松散比较时(即忽略类型),PHP中的任何非空字符串都等于TRUE
。您可以通过以下操作进行测试:
var_dump('this' == TRUE);
var_dump('that' == TRUE);
但是,当进行严格比较时(即考虑类型),结果会大不相同:
为了在函数中执行严格的比较,必须将可选的第三个参数设置为TRUE
:
$needle = TRUE;
$haystack = array('that', 'this');
var_dump(in_array($needle, $haystack, TRUE));
您希望在数组中找到什么,布尔变量还是布尔字符串?根据文档,如果指针是字符串,则比较是以区分大小写的方式进行的。请参阅对及其第三个参数的说明,
$strict
。我知道我可以将strict参数传入_array(),但我想知道我的问题的答案(我现在已经知道了)。据我所知,这不是重复的。我不是问如何解决这个问题,我是问为什么会这样。看到被接受的答案。很好的解释。我知道可以通过严格的参数来比较类型,我只是想了解我遇到的一些不直观的行为。FWIW我在返回一个我不控制的函数(drupal-hookesque调用)时传递bool,其中包含in_数组()。看见
$needle = TRUE;
$haystack = array('that', 'this');
var_dump(in_array($needle, $haystack, TRUE));