我有一个foreach语句,其顶部是if语句,然后是switch语句
<?php
foreach(self::CRITS as $crit){
if( $crit == 'some condition') {
$myVar = "size => 10";
}
switch($crit) {
case1:
$agg[$crit] = [
"terms" => [
"field" => $crit
$myVar
]
];
// expected if $crit == 'some condition' true
//$agg[$crit] = [
// "terms" => [
// "field" => $crit
// "size" => 10
// ]
//];
// expected if $crit == 'some condition' false
//$agg[$crit] = [
// "terms" => [
// "field" => $crit
// ]
//];
break;
// more cases with same behavior
}
}
根据IF语句,我想将$myVar
作为新的键/值对添加到$agg[$crit]["terms"]
。
在每种我的switch语句中,我都可以做到
case1:
$agg[$crit] = [
"terms" => [
"field" => $crit
]
];
if($crit == 'some condition') {
$agg[$crit]["terms"]["size"] = 10;
}
break;
但是IF语句将重复。
PHP中有一种方法可以做到这一点?
答案 0 :(得分:0)
例如:
if( $crit == 'some condition') {
$myKey = 'size';
$myValue = 10;
}
$agg[$crit] = [
"terms" => [
"field" => $crit,
$myKey => $myValue,
]
]
答案 1 :(得分:0)
不幸的是,似乎不可能那样做。
所以我想出了一个非常简单的解决方法,并使用了array_filter
<?php
foreach(self::CRITS as $crit){
$condition = ( $crit === 'some condition' ? true : false);
switch($crit) {
case1:
$agg[$crit] = [
"terms" => array_filter([
"field" => $crit
"size" => ($condition ? $size[$crit] : NULL)
],function($v){
return $v !== NULL;
})
];
break;
// more cases with same behavior
}
}
数组过滤器将删除所有大小为NULL的大小字段