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',
)
);
我已经搜索和测试了一段时间,只是找不到我想要完成的事情是否可以按照我的方式进行。
我想在定义数组时根据三元语句向数组添加 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',
)
);