Я хочу сделать условие из следующего массива, но это не дает ожидаемого результата, потому что не выполняет второе условие.
$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», а не другие. Пожалуйста помогите.
@dWinder, твой ответ все еще не работает. Пожалуйста, проверьте мой комментарий ниже вашего ответа.






Если я правильно понимаю, вы хотите, чтобы значение разрешения для ключа «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.
@LalhriatpuiiChhunthang Я не понимаю - пожалуйста, проверьте живой пример 3v4l.org/QXaj0 - это похоже на ваш ожидаемый результат. Не могли бы вы уточнить, что мне не хватает?
Почему? у вас 'MT' => 25 меньше 26
Для ключей, отличных от SC, минимальное значение равно 26, и если ET или другой ключ, исключая (SC с минимумом 23), меньше 26, условие должно быть ложным.
Хорошо, это именно то, что делает моя функция ... Вот почему в примере, который вы добавляете в комментарии, мой код возвращает false, поскольку условие, не выполненное для MT, равно 25, что меньше 26 ... (Вы написали, что ожидаемый результат верен , Зачем?)
Для SC минимальное значение должно быть 23, а условие должно возвращать значение true. Но если значение для другого ключа, такого как ET, EL, MT, MO, меньше 26, то оно должно возвращать false независимо от SC (который больше или равен 23). В другом случае, если значение ключей ET, EL, MO, MT больше или равно 26, а значение SC меньше 23, будет возвращено значение false. Достаточно ли ясно. Спасибо за помощь.
Рад, что смог помочь!
В настоящее время ваш код делает именно то, что написано - "SC" существует в обоих массивах, поэтому минимальное значение равно 23 для всего массива. Вы хотите, чтобы было 26 за исключением 23 только для SC?