我的系统将配置数组发送到这样的函数:
callThatFunction( array(k1 => v1, k2 => v2, ... kn=vn));
Run Code Online (Sandbox Code Playgroud)
我想根据某些情况制作其中一个关键值对.
我是否可以在不为数组创建变量的情况下执行此操作(这打破了其他人创建的干净配置语法)?
像这样
callThatFunction ( array(
k1 => v1,
if($cond( {k2 => v2,}
...
kn=vn));
Run Code Online (Sandbox Code Playgroud)
以上在语法上显然是错误的,但应该表达我的想法.
谢谢
Gum*_*mbo 36
您可以使用条件运算符cond ? true-expr : false-expr:
$someConfig = array(
'k1' => 'v1',
'k2' => $cond ? 'v2a' : 'v2b'
);
Run Code Online (Sandbox Code Playgroud)
如果计算结果为true,则条件表达式$cond ? 'v2a' : 'v2b'将产生.但这仅适用于密钥的值.'v2a'$cond'v2b'
如果您只想根据条件添加密钥,则需要使用单独的if:
$someConfig = array('k1' => 'v1');
if ($cond) {
$someConfig['k2'] = 'v2';
}
Run Code Online (Sandbox Code Playgroud)
编辑 您可以使用数组union运算符有条件地添加键而不使用变量,或者array_merge:
array('k1' => 'v1') + ($cond ? array('k2' => 'v2') : array())
array_merge(array('k1' => 'v1'), $cond ? array('k2' => 'v2') : array())
Run Code Online (Sandbox Code Playgroud)
现在,您需要确定哪些内容更易读或更易于维护.
把它放在数组声明之后:
$someConfig = array(
...
);
if($cond){ $someConfig['k2'] = $v2; }
Run Code Online (Sandbox Code Playgroud)
最终我想出了以下几点:
callThatFunction( array(k1 => v1, k2 => v2, ... kn=vn) + ($cond ? array(key=>value) : array() ) )
仍然会欣赏对更直接表达意图的建议
您可以像这样一次分配所有值并从数组中过滤空键:
$myArray = array_filter([
'k1' => 'v1',
'k2' => $cond ? 'v2' : false
]);
Run Code Online (Sandbox Code Playgroud)
这使您可以避免事后的条件,并且它具有相当的可读性。