我有一个问题,in_array给了我一个通知:未定义的索引。
if (
($value['device'] == $this->device or $value['device'] == 'all')
and
(!is_array($value['excludeLang']) or !in_array($this->lang, $value['excludeLang']))
and
($value['site'] == $this->site or $value['site'] == 'all')
) {
// do something
}
在这种情况下,$ value ['excludeLang']不是数组。当我检查$ this-> lang是否在数组
中时,有没有办法抑制错误答案 0 :(得分:0)
(!isset($value['excludeLang']) or !is_array($value['excludeLang']) or !in_array($this->lang, $value['excludeLang']))
答案 1 :(得分:0)
我会使用isset()
,特别是您的示例,我会按如下方式编写:
if (
($value['device'] == $this->device or $value['device'] == 'all')
and
(!isset($value['excludeLang']) or !is_array($value['excludeLang']) or !in_array($this->lang, $value['excludeLang']))
and
($value['site'] == $this->site or $value['site'] == 'all')
) {
// do something
}
这是有效的原因,我认为记住这一点很重要,因为在PHP中评估||
(或)条件的方式。
采取条件
if ($condition1 || $condition2)
or
语句中只有一件事需要被评估为true
。 PHP从左到右进行评估,因此在这种情况下如果$condition1
被评估为true,PHP将无需检查$condition2
。
在您的具体情况下,如果!isset($value['excludeLang'])
被评估为true
,则它将永远不会尝试运行in_array
,它将跳过所有其他条件,返回{ {1}}并继续。