2011-06-20 34 views
2

我想簡單的如果速記,檢查數組是否有一個特定的鍵,如果是這樣就取消它。PHP如果速記

$test = array("hi" => "123"); 
isset($test["hi"]) ? unset($test["hi"]); 

爲什麼這會給解析錯誤?什麼是正確的語法。

+4

三元操作符** IS NOT **簡寫爲'如果' – zerkms

+0

我感興趣的是你爲什麼不想使用if。我自己,我喜歡他們,因爲他們更容易閱讀代碼。想象一下其他人閱讀你的代碼,就像你有人在建立你的項目一樣?輕鬆理解>少字符。 – Mattis

+1

這個例子實際上毫無意義。沒有必要檢查變量/索引是否存在,然後再將其設置。 :) – netcoder

回答

3

因爲它是一個ternary operator。此代碼:

$a = ($condition)? $b : $c; 

等同於:

if($condition) $a = $b; 
else $a = $c; 

對於你的要求,就沒有必要進行了檢查,你可以簡單地unset()沒有檢查它,它會給出數組元素無錯誤消息:

unset($test["hi"]); 
0
$test = array("hi" => "123"); 
!isset($test["hi"]) ?: unset($test["hi"]); 
+1

你真的認爲它比* if更好嗎? – zerkms

+1

忽略它,它不會工作。請參閱BoltClock的回答。 –

+1

沒有。但OP確實希望這樣... – genesis

7

你不能在ternary conditional operator使用unset()作爲語言結構不返回值,運營商期望以評估一些價值,而不是執行的代碼塊。另外,您的三元運算符不完整(缺少:組件)。

無論如何,if語句如何長得多?

if (isset($test["hi"])) unset($test["hi"]); 
+0

只要你找到新的語言功能 - 使用它。沒關係,如果它是有用的或不 - 只是使用它,是現代的;-) – zerkms

2

三元條件操作是這樣的:

a ? b : c 

你缺少c條款,你的b條款不返回值的表達式。這個構造是而不是對於if語句的縮寫,並且您正嘗試將其用於設計。

使用的if聲明:

if (isset($test['hi'])) 
    unset($test['hi']); 

還有稍微更明確array_key_exists。將其文檔與isset的文檔進行比較,以確定哪個更適合您的需求。

1

您不需要測試任何東西。如果您嘗試取消設置非設置變量,則不會發生任何情況。

相當於你的代碼是:

$test = array("hi" => "123"); 
unset($test["hi"]); 

即使$test["hi"]沒有設置,你仍然可以取消它......

+0

不會有任何警告或通知出現? –

+0

@ElGabbu我試過了,它沒有! – SteeveDroz