里面的条件 array_reduce

Condition inside array_reduce

我想根据以下数组创建条件,但它没有给出我预期的结果,因为它没有 运行 第二个条件。

$arr = [
        [ 
        472 => [ 
            'EL' => 52.9, 
            'MT' => 57.375, 
            'MO' => 56.6, 
            'SC' => 26, 
            'ET' => 50.775 
            ] 
        ], [ 
        505 => [ 
            'EL' => 53.425, 
            'MT' => 25, 
            'MO' => 62.8, 
            'SC' => 23, 
            'ET' => 25
            ] 
        ]                
    ];

$total = array_reduce(
   $arr,
   function($arr, $key) {
     $id = key($key);
     $consumed = $key[$id];
     $sc = array_keys($consumed);
     $arr[$id] = [
       "totalc" => array_sum($consumed),
       "condition" => array_search('SC', $sc) ? min($consumed) >= 23:26
     ];
     return $arr;
   },
   []
 );

print_r($total) 输出如下:

Array
(
    [472] => Array
        (
            [totalc] => 243.65
            [condition] => 1
        )    
    [505] => Array
        (
            [totalc] => 189.225
            [condition] => 1
        )
    )

我的预期输出如下:

 Array
(
    [472] => Array
        (
            [totalc] => 243.65
            [condition] => 1
        )    
    [505] => Array
        (
            [totalc] => 189.225
            [condition] => 
        )
    )

你可以清楚的看到我要查:当是'SC'的时候我希望最小条件是23。但是对于其他的,我希望最小值是26。所以我用了array_search() 当元素为'SC'时扫描数组。不幸的是,它只检查 'SC' 而不是其他人。请帮助我。

如果我理解正确,您希望 "SC" 键的允许值最小为 23,其余所有为 26。

注意行:array_search('SC', $sc) ? min($consumed) >= 23:26 首先检查 "SC" 是否存在并将 整个 数组的最小值设置为 23 或 26。

如果你想根据键有不同的最小值我会推荐这个:

function checkMin($arr, $min, $exception) {
    foreach($arr as $k => $v) {
        if ($v < (isset($exception[$k]) ? $exception[$k] : $min)) 
            return false;
    }
    return true;
}

现在您可以使用以下方式调用:

"condition" =>  checkMin($consumed, 26, ["SC" => 23])

希望对您有所帮助!