2017-12-07 10 views
0

私は長い時間前に以下のようにコードを書くことを覚えています。多次元配列に新しい値を追加する前にキーが存在するかどうかを確認する必要がありますか?

$transactions = []; 

if (!isset($transactions[$account])) { 
    $transactions[$account] = []; 
} 

if (!$transactions[$account]['cards'])) { 
    $transactions[$account]['cards'] = []; 
} 

$transactions[$account]["cards"][] = $card; 

が、最近、私はこの書き込みを開始していることに気づいた:

$transactions = []; 

$transactions[$account]["cards"][] = $card; 

をし、すべてが、これらの配列を宣言せずにうまく動作するようですあなたは多次元配列でそれに値を追加する前に、各キーを確認する場合は予め。

+2

もしあなたがチェックしなかったら、既存の存在を上書きすることが可能です** 'ただ一つしかありません '**しかし、重複したキーを得ることができなければ、チェックする必要はありません – RiggsFolly

答えて

2

はい、PHPが暗黙的割り当てに中間アレイを作成する(およびのみ割り当てに):

[配列]が存在しない、まだ、それが作成されるので、これも 代替である場合は配列を作成する方法。 [配列]に既に値(たとえば、要求変数からの文字列 )が含まれていると、この値はそのまま残り、[] は実際に文字列アクセス演算子を表す可能性があるため、この方法は避けてください。 です。 変数を直接代入で初期化する方が常に良いです。

http://php.net/manual/en/language.types.array.php#language.types.array.syntax.modifying

ので、はい、それは動作し、明示的に限り、あなたはあなたの配列構造について確認しているとあなたが誤って配列の代わりに文字列インデックスにアクセスするために[...]を使用していないとして、サポートされていますあなたは期待した。

0

の多次元または任意の文字を作成するときにチェックする必要はありません。 更新またはを削除する場合は、チェックする必要があります。

Examle:

$transactions[$account]["cards"][] = $card; 
// you dont need to check here. 

$transactions[$account]["cards"][] = 343; // This may not work 
// When you want to update it, you need to check 

if(isset($transactions[$account]["cards"])) 
    $transactions[$account]["cards"] = 343; 
// The above condition helps you in not breaking the script, 
//if you want to assign to an array which is not created. 

グッドラック!

関連する問題