PHP in_array问题,同时检查数组中的零值给出true

时间:2013-06-21 10:01:08

标签: php

使用PHP的in_array()时,我遇到了一个奇怪的情况。下面是我的代码及其输出

<?php
$process = array("as12"=>"deleted","as13"=>1,"as14"=>1);
if(!in_array(0, $process))
    echo "success";
else
    echo "not success";

//It's outputting "not success";

var_dump(in_array(0, $process));
//Output : null

var_dump(in_array(0, $this->tProcessActions) === true);
///Output : true

如果我们查看$process数组,则其中没有0值。如果我检查if(in_array(0, $process))

,它仍然是真的

有人可以了解它吗?

7 个答案:

答案 0 :(得分:3)

尝试

if(!in_array('0', $process)) {

或者您可以使用搜索(可选)

if(array_search('0',$process)) {

答案 1 :(得分:3)

如果您需要严格检查,请使用 $strict 选项:

in_array(0, $process, true)

如果您不了解规则/期望错误的事情,PHP的字符串⟷int比较是众所周知的。

答案 2 :(得分:2)

我相信你应该将0放在引号内:

if(!in_array(“0”,$ process))

答案 3 :(得分:1)

使用strict参数可在此处提供您想要的内容:

$process = array("as12"=>"deleted","as13"=>1,"as14"=>1);
var_dump( in_array(0, $process, true ) );
// gives false

或使用array_search并测试是否为非假;

var key = array_search( 0, array( 'foo' => 1, 'bar' => 0 ) );
// key is "bar"

答案 4 :(得分:1)

我认为因为in_array可能不是严格的类型检查。因为如果你检查

 if (0 == "deleted") echo "xx";

答案 5 :(得分:1)

试试这个

if(!in_array('0', $process))

答案 6 :(得分:1)

您需要使用in_array函数的第三个参数[$ is_strict]。

in_array(0, $process, true)

这一点是(int)转换后的任何字符串都等于0。 (int)“删除”=&gt; 0。 所以in_array没有严格模式等于“删除”== 0这是真的。当你使用strict时它等于“删除”=== 0哪个是假的。