1

在使用 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))

任何人都可以对此有所了解吗?

4

7 回答 7

3

试试喜欢

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

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

if(array_search('0',$process)) {
于 2013-06-21T10:03:59.667 回答
3

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

in_array(0, $process, true)

众所周知,如果您不了解规则/期望错误的事情,PHP 的 string ⟷ int 比较会很复杂。

于 2013-06-21T10:07:08.307 回答
2

我相信你应该把0引号放在里面:

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

于 2013-06-21T10:05:35.900 回答
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"
于 2013-06-21T10:04:10.017 回答
1

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

 if (0 == "deleted") echo "xx";
于 2013-06-21T10:09:15.943 回答
1

尝试这个

if(!in_array('0', $process))
于 2013-06-21T10:09:17.133 回答
1

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

in_array(0, $process, true)

关键是什么字符串经过 (int) 转换后等于 0。 (int) "deleted" => 0。所以 in_array 没有严格模式等于 "deleted" == 0 这为真。当您使用 strict 时,它等于“已删除”=== 0 which false。

于 2013-06-21T10:10:38.170 回答