使用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))
有人可以了解它吗?
答案 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哪个是假的。