php - 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])
希望有帮助!
推荐阅读
- javascript - 有没有办法在javascript中使用显示:无延迟(随着时间的推移消失)?
- android - 对于输入字符串:“”。我已经尝试了很多次但无法得到解决方案
- r - 使用用户输入选择子目录
- java - 通过 @Query 注释按日期查询 spring-data-monogdb 不返回结果
- python - 存储自定义数据 Celery Result
- excel - 函数返回值作为excel公式
- c++ - 如何强制循环执行另一次迭代为零并关闭循环?
- java - 如何在 Java 上编写“(事件,状态)-> 状态”函数
- java - Java中的命令行参数给出错误
- node.js - 为什么网络聊天机器人中的测试没有响应