tha*_*guy 9 php arrays ternary-operator
我一直在搜索和测试一段时间,但是我无法找到我想要完成的事情,就像我正在进行的那样.
我想基于三元语句在定义数组时向数组添加键/值对.
Array(
'Item 1' => 'Some value',
(FALSE)? NULL : 'Item 2' => 'Another Value'
)
Run Code Online (Sandbox Code Playgroud)
我的预期/想要的行为是结果:
Array (
[Item 1] => Some value
[Item 2] => Another Value
)
Run Code Online (Sandbox Code Playgroud)
当陈述是真的时候:
Array(
'Item 1' => 'Some value',
(TRUE)? NULL : 'Item 2' => 'Another Value'
)
Run Code Online (Sandbox Code Playgroud)
产量:
Array (
[Item 1] => Some value
)
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
Array (
[Item 1] => Some value
[] => Another Value
)
Run Code Online (Sandbox Code Playgroud)
这导致问题,因为A)我不希望第一个元素存在于第一位和B)False条件值被分配给True条件值(在这种情况下为NULL,它将键设置为NULL [])
这非常奇特.我唯一的选择是使用标准的if(){}语句,如果条件为假(通过使用!),则将元素弹出到数组中?
注意:对于第2项具有空值是不可接受的,而如果初始条件为真,则根本不存在任何元素.
任何帮助将不胜感激!
dec*_*eze 16
您使用该三元运算符所做的就是确定密钥名称.无论如何,元素都将被放入数组中,它就在数组文字声明中.
使用内联表达式可以做的最好的事情是这样的:
['foo' => 'bar'] + (true ? [] : ['baz' => 42])
Run Code Online (Sandbox Code Playgroud)
实际上,你应该更好地写:
$arr = ['foo' => 'bar'];
if (true) {
$arr['baz'] = 42;
}
Run Code Online (Sandbox Code Playgroud)
编写更紧凑的代码并不总是最佳目标,首先需要具有可读性和可理解性.