使用in_array的正确方法

时间:2015-06-26 13:01:08

标签: php

我有一个问题,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是否在数组

中时,有没有办法抑制错误

2 个答案:

答案 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}}并继续。