php - 如何在数组中查找双精度值并组合双精度值
问题描述
我正在研究一种过滤掉双精度值的方法,如下面的示例所示,数组中存在的产品基本上是双精度的,应该组合起来(用组合的值创建一个新键)。
产品应通过 api_id 组合。
//old current array
[products] => Array
(
[product_5c7fb5f72f9d5_192] => Array
(
[record_id] => 84721
[api_id] => 192
[amount] => 12
[cost_price] => 3.36
)
[product_5c7fb5f72fe49_192] => Array
(
[record_id] => 84722
[api_id] => 177
[amount] => 1
[cost_price] => 1.09
)
[product_5c7fb5f7301b2_192] => Array
(
[record_id] => 84724
[api_id] => 192
[amount] => 24
[cost_price] => 6.72
)
[product_5c7fb5f7301b2_192] => Array
(
[record_id] => 84725
[api_id] => 192
[amount] => 24
[cost_price] => 6.72
)
)
// this should be new new array
[products] => Array
(
[product_5c7fb5f72f9d5_192] => Array
(
[record_id] => 84721
[api_id] => 192
[amount] => 60//new value
[cost_price] => 16.8//new value
)
[product_5c7fb5f72fe49_192] => Array
(
[record_id] => 84722
[api_id] => 177
[amount] => 1
[cost_price] => 1.09
)
)
解决方案
您可以使用array_reduce
:
$products = array_reduce($products, function ($carry, $product) {
if (!isset($carry[$product['api_id']])) {
$carry[$product['api_id']] = $product;
}
else {
$carry[$product['api_id']]['amount'] += $product['amount'];
$carry[$product['api_id']]['cost_price'] += $product['cost_price'];
}
return $carry;
}, []);
推荐阅读
- python - Keras 的基本二进制分类不起作用
- html - Flex 响应式移动
- c++ - 处理 QListWidget 点击和滚动
- html - 在 contentEditable-div 中调整图像大小在 Firefox 中停止工作
- cassandra-3.0 - 在 cassandra cql 中查询
- python - 将日期时间列表转换为包含特定年份和月份的日期时间计数的列表列表
- angular - 如何更改使用 angular 6、ionic 4 作为前端和 scala 作为后端的混合应用程序的 CORS 策略?
- python - Tensorflow 无法在 Ubuntu 18.04 上使用 CUDA 9.1、CuDNN 7.1、Python 3.6、conda 识别 GPU
- javascript - Firefox 和 .diff 的自定义格式无效的日期格式不起作用
- python - 如何在 Django 2 admin 中创建自定义页面?