Как я могу добавить условие в массиве php? - PullRequest
24 голосов
/ 17 апреля 2011

Вот массив

$anArray = array(
   "theFirstItem" => "a first item",
   if(True){
     "conditionalItem" => "it may appear base on the condition",
   }
   "theLastItem"  => "the last item"

);

Но я получаю ошибку PHP Parse, почему я могу добавить условие в массив, что происходит ??:

PHP Parse error:  syntax error, unexpected T_IF, expecting ')'

Ответы [ 7 ]

38 голосов
/ 17 апреля 2011

К сожалению, это невозможно вообще.

Если с элементом, но со значением 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";
4 голосов
/ 30 апреля 2014

Если вы создаете чисто ассоциативный массив, и порядок ключей не имеет значения, вы всегда можете условно назвать ключ, используя синтаксис троичного оператора.

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

Таким образом, если условие выполнено, ключ существует с данными. Если нет, то это просто пустой ключ с пустым строковым значением. Однако, учитывая большой список других ответов, возможно, есть лучший вариант, чтобы удовлетворить ваши потребности. Это не совсем чисто, но если вы работаете над проектом, который имеет большие массивы, это может быть проще, чем вырвать массив и затем добавить потом; особенно если массив многомерный.

4 голосов
/ 17 апреля 2011

Вы можете сделать это так:

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

Однако то, что вы хотите, невозможно.

1 голос
/ 10 января 2015

Попробуйте, если у вас есть ассоциативный массив с разными ключами:

$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 голос
/ 17 апреля 2011

Здесь нет никакой магии, чтобы помочь. Лучшее, что вы можете сделать, это:

$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";
}

Или, если порядок имеет значение и условные элементы больше, чем пара, вы можете сделать это, что можно считать более читабельным:

$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
0 голосов
/ 11 декабря 2018

Вы можете сделать это следующим образом:

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

сбросить элемент массива EMPTY, если условие ложно

unset($anArray['EMPTY']);
0 голосов
/ 26 августа 2016

Вы можете назначить все значения и сразу отфильтровать пустые ключи из массива следующим образом:

$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; });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...