PHP 关联数组中的三元语句来同时设置键和值?

PHP Ternary statement within Associative Array to set both key & value?

我已经搜索和测试了一段时间,只是找不到我想要完成的事情是否可以按照我的方式进行。

我想在定义数组时根据三元语句向数组添加 key/value 对。

Array(
    'Item 1' => 'Some value',
    (FALSE)? NULL : 'Item 2' => 'Another Value'
)

我的 expected/wanted 行为是为了让结果成为:

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) 假条件值被分配给真条件值(在本例中为 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'
)

这样做的缺点是代码体积庞大,阅读起来不清晰,并给出警告:

Warning: Illegal offset type

所以为了完整起见,我添加了更多这个答案。

完整示例 (online demo):

<?php
/**
 * PHP Ternary statement within Associative Array to set both key & value?
 * @link 
 */

var_dump(
    Array(
        'Item 1'                   => 'Some value',
        TRUE  ? array() : 'Item 2' => 'Another Value',
        FALSE ? array() : 'Item 3' => 'Just Another Value',
    )
);