有条件将元素添加到数组

时间:2019-10-11 13:18:53

标签: php

我有一个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中有一种方法可以做到这一点?

2 个答案:

答案 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的大小字段