Состояние внутри 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", а не другие. Пожалуйста, помогите мне.

1 ответ

Решение

Если я правильно понимаю, вы хотите, чтобы значение ключа "SC" было минимальным, если 23, а для всех остальных 26.

Обратите внимание, что строка: array_search('SC', $sc) ? min($consumed) >= 23:26 Сначала проверьте, существует ли "SC", и установите минимум для всего массива как 23 или 26.

Если вы хотите иметь различное значение min в зависимости от ключей, я бы порекомендовал это:

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])

Надеюсь, это поможет!

Другие вопросы по тегам