我有以下代码:
render_array(array(
"weekdayRate" => 100,
"weekendRate" => 200,
"overrides" => $overrides,
"taxPercent" => 11.0
));
在某些情况下,$overrides
变量可以是一个空数组,为null或false。在这种情况下是否可以完全省略密钥?
我知道我可以简单地创建一个数组变量并手动设置所需的键,但是我正在寻找一种更简单的方法。
答案 0 :(得分:3)
不,您不能仅仅因为其值是false来阻止PHP查看该键。您必须将其过滤掉。您只需array_filter()
,然后再将数组传递到render_array()
:
render_array(array_filter([
"weekdayRate" => 100,
"weekendRate" => 200,
"overrides" => $overrides,
"taxPercent" => 11.0
]));
这将删除所有具有虚假值的键。参见this demo。
如果只想删除overrides
键,但允许其他键使用假值,则可以按如下方式在array_filter()
上使用可选的回调,并指定ARRAY_FILTER_USE_BOTH
常量:< / p>
array_filter([
"weekdayRate" => 100,
"weekendRate" => 200,
"overrides" => $overrides,
"taxPercent" => 11.0
], function($v, $k) {
if ($k == 'overrides' && !$v) {
return false;
}
return true;
}, ARRAY_FILTER_USE_BOTH);
See demo(通知taxPercent
是虚假的,但没有被删除,而overrides
却是。)
或者,您可以只检查$overrides
的值是否正确,并手动设置密钥:
$arr = [
"weekdayRate" => 100,
"weekendRate" => 200,
"taxPercent" => 11.0
];
if ($overrides) {
$arr['overrides'] = $overrides;
}
render_array($arr);
答案 1 :(得分:1)
render_array(array_filter(array(
"sun" => 100,
"mon" => 100,
"tue" => 100,
"wed" => 100,
"thu" => 100,
"fri" => 100,
"sat" => 100,
"overrides" => $overrides,
"markup" => 11.0
), function($v) {
if ($v) {
return true;
}
return false;
}))
答案 2 :(得分:0)
可能:是
在分配之前检查您的条件,例如:
$arr = array(
"sun" => 100,
"mon" => 100,
"tue" => 100,
"wed" => 100
"thu" => 100,
"fri" => 100,
"sat" => 100,
"markup" => 11.0
);
if ($overrides)
$arr["overrides"] = $overrides;
render_array($arr);
答案 3 :(得分:0)
虽然不完全是您的要求
有条件地在数组初始化器中插入一个键值对
我会这样实现的:
$var = array(
"sun" => 100,
"mon" => 100,
"tue" => 100,
"wed" => 100
"thu" => 100,
"fri" => 100,
"sat" => 100,
"markup" => 11.0
);
if (!empty($overrides)) {
$var['overrides'] = $overrides;
}
render_array($var);
答案 4 :(得分:0)
我最终使用了array union operator。注意三元运算符周围的括号:
render_array(array(
"weekdayRate" => 100,
"weekendRate" => 200
) + ($overrides
? array("overrides" => $overrides)
: array()
) + array(
"taxPercent" => 11.0
));
这也保留了键的顺序(这是我在OP中未提及的要求)。