PHP тернарный оператор в ассоциативном массиве для установки ключа и значения?
Я искал и тестировал в течение некоторого времени и просто не могу найти, возможно ли то, что я пытаюсь сделать, так, как я это делаю.
Я хотел бы добавить пару ключ / значение в массив при определении массива на основе тернарного оператора.
Array(
'Item 1' => 'Some value',
(FALSE)? NULL : 'Item 2' => 'Another Value'
)
мое ожидаемое / желаемое поведение для результата тогда будет:
Array (
[Item 1] => Some value
[Item 2] => Another Value
)
и когда утверждение верно:
Array(
'Item 1' => 'Some value',
(TRUE)? NULL : 'Item 2' => 'Another Value'
)
выход:
Array (
[Item 1] => Some value
)
но вместо этого я получить:
Array (
[Item 1] => Some value
[] => Another Value
)
что вызывает проблемы, так как A) я не хочу, чтобы этот второй элемент существовал в первую очередь, и B) значение False condition присваивается значению True conditions (в этом случае NULL, который устанавливает ключ в NULL [])
это очень странно. Является ли мой единственный вариант иметь стандартный оператор if () {} и Pop элемент, если условие false (с помощью! в массив?
Примечание: наличие нулевого значения для пункта 2 неприемлемо, скорее если начальное условие истинно, элемент вообще не должен существовать.
любая помощь была бы очень признательна!
2 ответов
все, что вы делаете с этим тернарным оператором, - это решить имя ключа. Элемент будет помещен в массив независимо от того, что, он находится прямо там в объявлении литерала массива.
лучшее, что вы могли бы сделать со встроенным выражением, это что-то вроде этого:
['foo' => 'bar'] + (true ? [] : ['baz' => 42])
практически, вам, вероятно, лучше написать:
$arr = ['foo' => 'bar'];
if (true) {
$arr['baz'] = 42;
}
написание более компактного кода не всегда является лучшей целью, она должна быть читаемой и понятной в первую очередь всех.
Это было бы возможно только путем аннулирования заявления.
например, вы берете значение для ключа, который PHP не может обработать (например, массив), и всякий раз, когда вы не хотите добавлять запись, вы используете этот ключ.
принцип на самом деле похож на то, что вы наметили с NULL
значение:
Array(
'Item 1' => 'Some value',
TRUE ? array() : 'Item 2' => 'Another Value'
)
недостатком этого является то, что код громоздкий, непонятный для чтения и дает предупреждения:
предупреждение: незаконное смещение тип
поэтому я добавляю этот ответ больше для полноты.
полный пример (онлайн демо):
<?php
/**
* PHP Ternary statement within Associative Array to set both key & value?
* @link http://stackoverflow.com/a/29327671/367456
*/
var_dump(
Array(
'Item 1' => 'Some value',
TRUE ? array() : 'Item 2' => 'Another Value',
FALSE ? array() : 'Item 3' => 'Just Another Value',
)
);