2011-06-20 19 views
2

配列が特定のキーを持っているかどうかをチェックし、そうでない場合はチェックしておくと簡単です。PHP簡略化の場合

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

なぜ解析エラーが発生するのですか?正しい構文は何ですか。

+4

三項演算子**は 'へ**速記ではありませんif' – zerkms

+0

私はなぜあなたが使用したくないのか興味があります。私自身、コードをより簡単に読むことができるので、私はそれらが好きです。あなたのコードを誰かが読んでいると想像してみましょう。容易に理解される>少ない文字。 – 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 operatorunset()を使用することはできませんし、オペレータは、コードブロックを実行していない、いくつかの値に評価することを期待します。さらに、三元演算子が不完全です(:コンポーネントがありません)。

とにかくif文はどのように長くなりますか?

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

新しい言語機能を見つけたら、それを使用してください。それが有用であるかどうかは重要ではありません - それを現代的に使用してください;-) – zerkms

2

三項条件演算子は、次のようになります。

a ? b : c 

あなたはc句、そしてあなたのb句は値を返す式ではないことを逃しています。この構造体はではなく、であり、if文の省略形であり、それが設計されたものではなく使用しようとしています。

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

もう少し明示的array_key_existsもあります:

ifステートメントを使用します。そのドキュメントをissetのものと比較して、どちらがあなたのニーズに適しているかを判断してください。

1

何もテストする必要はありません。設定されていない変数を設定解除しようとすると、何も起こりません。

あなたのコードと等価では次のようになります。

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

$test["hi"]が設定されていない場合でも、あなたはそれまだ設定解除することができます...

+0

は警告も通知も出ませんか? –

+0

@ElGabbu私は試しましたが、それはしませんでした! – SteeveDroz