2015-06-26 81 views
0

我有一個問題,in_array給我一個通知:未定義的索引。正確的方式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']不是數組。有抑制錯誤,當我檢查$這個 - 的方式> lang是陣列

+4

isset()是你的朋友 – donald123

回答

0
(!isset($value['excludeLang']) or !is_array($value['excludeLang']) or !in_array($this->lang, $value['excludeLang'])) 
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,它會跳過所有其他條件,返回true繼續。