Условие внутри 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" существует в обоих массивах, поэтому минимальное значение равно 23 для всего массива. Вы хотите, чтобы было 26 за исключением 23 только для SC?

dWinder 28.02.2019 23:49

@dWinder, твой ответ все еще не работает. Пожалуйста, проверьте мой комментарий ниже вашего ответа.

the thinker 01.03.2019 04:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю, вы хотите, чтобы значение разрешения для ключа «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])

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

Спасибо. это все еще не работает. Если минимальное значение ключа меньше 23, я хочу вывести 1, но минимальное значение для другого ключа равно 26. Поэтому, если «SC» = 23 и ET = 26, он выведет 1, поскольку он соответствует условию. Но SC=23, ET=25 не соответствует условию, потому что ET min должно быть равно 26.

the thinker 01.03.2019 04:40

@LalhriatpuiiChhunthang Я не понимаю - пожалуйста, проверьте живой пример 3v4l.org/QXaj0 - это похоже на ваш ожидаемый результат. Не могли бы вы уточнить, что мне не хватает?

dWinder 01.03.2019 07:48

Почему? у вас 'MT' => 25 меньше 26

dWinder 01.03.2019 07:53

Для ключей, отличных от SC, минимальное значение равно 26, и если ET или другой ключ, исключая (SC с минимумом 23), меньше 26, условие должно быть ложным.

the thinker 01.03.2019 07:58

Хорошо, это именно то, что делает моя функция ... Вот почему в примере, который вы добавляете в комментарии, мой код возвращает false, поскольку условие, не выполненное для MT, равно 25, что меньше 26 ... (Вы написали, что ожидаемый результат верен , Зачем?)

dWinder 01.03.2019 08:10

Для SC минимальное значение должно быть 23, а условие должно возвращать значение true. Но если значение для другого ключа, такого как ET, EL, MT, MO, меньше 26, то оно должно возвращать false независимо от SC (который больше или равен 23). В другом случае, если значение ключей ET, EL, MO, MT больше или равно 26, а значение SC меньше 23, будет возвращено значение false. Достаточно ли ясно. Спасибо за помощь.

the thinker 01.03.2019 08:33

Рад, что смог помочь!

dWinder 01.03.2019 13:32

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