2016-08-17 100 views
0

我想知道什麼是適當的方法來檢查數組鍵是真的,而不會拋出PHP通知,如果它不存在?PHP檢查數組值真true

我的腳本經歷了每個循環中的幾個if語句,並且隨着它的發展,它在名爲「audit」的數組中創建鍵。

所以對於循環的一次迭代中,陣列可能是這樣的:

$audit = 
    Array 
    (
    'price_changed' => 1, 
    'price_changed_to' => 10, 
    'quantity_changed' => 1, 
    'quantity_changed_to' => 6 
) 

對於未來,它可能是這樣的:

$audit = 
    Array 
    (
    'quantity_changed' => 1, 
    'quantity_changed_to' => 4, 
    'description_changed' => 1, 
    'description_changed_to' => 'Test product' 
) 

現在我希望能夠到做這樣的事情:

if($audit['price_changed']){ 
    .... do something .... 
} 

但在第二個項目的情況下爲每個,這個鍵不存在,我的德錯誤日誌填滿了PHP通知。

我確信我可以做下面這樣的事情,但似乎我不應該爲這樣簡單的事情輸入那麼多。

if(isset($audit['price_changed'])) { 
    if($audit['price_changed']) { 
    .... do something .... 
    } 
} 

我在想這個太難了麼?

編輯:這是我的審計數組減少的例子...太多的可能性在循環開始時將零分配給所有它們。

+1

使用'empty'功能 –

+0

你可以結合你的如果需要,可以使用AND運算符。 – Rizier123

回答

2

使用empty()功能。這將同時檢查condtions在陣列

  • 您的鍵存在
  • 關鍵的
  • 值不false0empty string

例子:

if (!empty($audit['price_changed'])) { 
    // do something 
} 
+0

這也是一個很好的選擇,謝謝! – drumichael611

0

而不是使用嵌套的,如果你能簡單地做:

if(isset($audit['price_changed']) && $audit['price_changed']) { 
    // do something ... 
} 
+0

所以這不會發出通知,即使我們仍在檢查可能不存在的東西?或者如果'isset'返回false,它會自動放棄嗎? – drumichael611

+0

如果isset返回'false',php不會檢查下一個條件,因爲'&&'操作符。只有在兩個條件都滿足的情況下,它纔會觸及'do something'區塊 –

+0

好的 - 我不確定它是否會在中間放棄或不放棄 - 謝謝! – drumichael611

0

對於PHP7,你可以使用空合併運算符??

if ($value['price_changed'] ?? false) 

如果price_change沒有設置,??將返回第二ARG代替,導致if失敗,因爲表達式將評估爲false:

php > $foo = array('t' => true, 'f' => false); 
php > if ($foo['t'] ?? false) { echo 'true'; } else { echo 'false'; } 
true 
php > if ($foo['f'] ?? false) { echo 'true'; } else { echo 'false'; } 
false 
php > if ($foo['file_not_found'] ?? false) { echo 'true'; } else { echo 'false'; } 
false