web-dev-qa-db-ja.com

PHP配列内に条件を追加するにはどうすればよいですか?

これが配列です

$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 ')'
27
Tattat

残念ながら、それはまったく不可能です。

アイテムを持っているが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";
38
ThiefMaster

純粋な連想配列を作成していて、キーの順序が重要でない場合は、3項演算子構文を使用して、条件付きでいつでもキーに名前を付けることができます。

$anArray = array(
    "theFirstItem" => "a first item",
    (true ? "conditionalItem" : "") => (true ? "it may appear base on the condition" : ""),
    "theLastItem" => "the last item"
);

このように、条件が満たされた場合、キーはデータとともに存在します。そうでない場合は、空の文字列値を持つ空白のキーです。ただし、他の回答の優れたリストがすでにあるので、ニーズに合うより良いオプションがあるかもしれません。これは正確ではありませんが、配列が大きいプロジェクトで作業している場合は、配列を分割して後で追加するよりも簡単です。特に配列が多次元である場合。

5
Adam Kelso

あなたはこのようにそれを行うことができます:

$anArray = array(1 => 'first');
if (true) $anArray['cond'] = 'true';
$anArray['last'] = 'last';

しかし、あなたが望むものは不可能です。

4
azat

ここで役立つ魔法はありません。あなたができる最善はこれです:

$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
1
Jon

異なるキーを持つ連想配列がある場合は、これを試してください。

$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",
    ]
);
1
Tony Axo

とてもシンプルです。必須要素を含む配列を作成します。次に、条件付き要素を配列に追加します。次に、必要に応じて他の要素を追加します。

$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要素なし、空の文字列なし、アイテムを好きな場所に配置、ハッセルなし

0
Atai Rabby

次のように、すべての値を割り当てて、配列から空のキーを一度にフィルタリングできます。

_$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; });
_
0
billynoah

あなたはこのようにそれを行うことができます:

$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']);
0
Asim Ansari