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 условия присваивается значению True conditions (в этом случае NULL, который устанавливает ключ в NULL [])

Это очень странно. Является ли мой единственный вариант иметь стандартную инструкцию if () {} и вызывать элемент, если условие является ложным (используя!) В массиве?

Примечание. Наличие нулевого значения для элемента 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', ) );