これが配列です
$anArray = array(
"theFirstItem" => "a first item",
if(True){
"conditionalItem" => "it may appear base on the condition",
}
"theLastItem" => "the last item"
);
しかし、PHP解析エラーが発生します。なぜ配列内に条件を追加できるのですか、どうなりますか?
PHP Parse error: syntax error, unexpected T_IF, expecting ')'
残念ながら、それはまったく不可能です。
アイテムを持っているがNULL値を指定しても問題ない場合は、次のようにします。
$anArray = array(
"theFirstItem" => "a first item",
"conditionalItem" => $condition ? "it may appear base on the condition" : NULL,
"theLastItem" => "the last item"
);
それ以外の場合は、そのようにする必要があります。
$anArray = array(
"theFirstItem" => "a first item",
"theLastItem" => "the last item"
);
if($condition) {
$anArray['conditionalItem'] = "it may appear base on the condition";
}
順序が重要な場合は、さらに醜くなります。
$anArray = array("theFirstItem" => "a first item");
if($condition) {
$anArray['conditionalItem'] = "it may appear base on the condition";
}
$anArray['theLastItem'] = "the last item";
ただし、これをもう少し読みやすくすることもできます。
$anArray = array();
$anArray['theFirstItem'] = "a first item";
if($condition) {
$anArray['conditionalItem'] = "it may appear base on the condition";
}
$anArray['theLastItem'] = "the last item";
純粋な連想配列を作成していて、キーの順序が重要でない場合は、3項演算子構文を使用して、条件付きでいつでもキーに名前を付けることができます。
$anArray = array(
"theFirstItem" => "a first item",
(true ? "conditionalItem" : "") => (true ? "it may appear base on the condition" : ""),
"theLastItem" => "the last item"
);
このように、条件が満たされた場合、キーはデータとともに存在します。そうでない場合は、空の文字列値を持つ空白のキーです。ただし、他の回答の優れたリストがすでにあるので、ニーズに合うより良いオプションがあるかもしれません。これは正確ではありませんが、配列が大きいプロジェクトで作業している場合は、配列を分割して後で追加するよりも簡単です。特に配列が多次元である場合。
あなたはこのようにそれを行うことができます:
$anArray = array(1 => 'first');
if (true) $anArray['cond'] = 'true';
$anArray['last'] = 'last';
しかし、あなたが望むものは不可能です。
ここで役立つ魔法はありません。あなたができる最善はこれです:
$anArray = array("theFirstItem" => "a first item");
if (true) {
$anArray["conditionalItem"] = "it may appear base on the condition";
}
$anArray["theLastItem"] = "the last item";
アイテムの順序を特に気にしない場合は、もう少し耐えられます。
$anArray = array(
"theFirstItem" => "a first item",
"theLastItem" => "the last item"
);
if (true) {
$anArray["conditionalItem"] = "it may appear base on the condition";
}
または、順序doesが重要で、条件付きアイテムが2つ以上ある場合は、これを行うことができます。
$anArray = array(
"theFirstItem" => "a first item",
"conditionalItem" => "it may appear base on the condition",
"theLastItem" => "the last item",
);
if (!true) {
unset($anArray["conditionalItem"]);
}
// Unset any other conditional items here
異なるキーを持つ連想配列がある場合は、これを試してください。
$someArray = [
"theFirstItem" => "a first item",
] +
$condition
? [
"conditionalItem" => "it may appear base on the condition"
]
: [ /* empty array if false */
] +
[
"theLastItem" => "the last item",
];
または、配列が関連付けられていない場合はこれ
$someArray = array_merge(
[
"a first item",
],
$condition
? [
"it may appear base on the condition"
]
: [ /* empty array if false */
],
[
"the last item",
]
);
とてもシンプルです。必須要素を含む配列を作成します。次に、条件付き要素を配列に追加します。次に、必要に応じて他の要素を追加します。
$anArray = array(
"theFirstItem" => "a first item"
);
if(True){
$anArray+=array("conditionalItem" => "it may appear base on the condition");
}
$more=array(
"theLastItem" => "the last item"
);
$anArray+=$more;
あなたはこのコードをさらに短くするために変更します、私はそれを自発的にするために精巧なコードを与えました。 NULL要素なし、空の文字列なし、アイテムを好きな場所に配置、ハッセルなし
次のように、すべての値を割り当てて、配列から空のキーを一度にフィルタリングできます。
_$anArray = array_filter([
"theFirstItem" => "a first item",
"conditionalItem" => $condition ? "it may appear base on the condition" : NULL,
"theLastItem" => "the last item"
]);
_
これにより、事後の余分な条件を回避し、キーの順序を維持し、かなり読みやすくすることができます。ここでの唯一の注意点は、他の偽の値(0, false, "", array()
)がある場合、それらも削除されることです。その場合は、NULL
を明示的にチェックするためのコールバックを追加できます。次の場合、theLastItem
は誤ってフィルタリングされません。
_$anArray = array_filter([
"theFirstItem" => "a first item",
"conditionalItem" => $condition ? "it may appear base on the condition" : NULL,
"theLastItem" => false,
], function($v) { return $v !== NULL; });
_
あなたはこのようにそれを行うことができます:
$anArray = array(
"theFirstItem" => "a first item",
(true ? "conditionalItem" : "EMPTY") => (true ? "it may appear base on the condition" : "EMPTY"),
"theLastItem" => "the last item"
);
条件がfalseの場合、EMPTY配列項目の設定を解除します
unset($anArray['EMPTY']);