php - 在数组php中搜索重复值并求和
问题描述
我有一个这样的数组:
array (
0 =>
array (
'total_price' => '19.120000',
'total_percent' => '0.20',
'vat_code' => 22,
'discount_percent' => '3.82',
),
1 =>
array (
'total_price' => '58.000000',
'total_percent' => '0.60',
'vat_code' => 22,
'discount_percent' => '11.60',
),
2 =>
array (
'total_price' => '20.000000',
'total_percent' => '0.21',
'vat_code' => 4,
'discount_percent' => '4.00',
),
)
我正在尝试使用 'vat_code' 作为键来搜索值,如果我找到相同的 'vat_code' 值,则对 total_price、total_percent 和 discount_percent 值求和。
换句话说,我希望得到这样的结果:
array (
0 =>
array (
'total_price' => '77.120000', // result of 58 + 19.12
'total_percent' => '0.80', // result of 0.60 + 0.20
'vat_code' => 22,
'discount_percent' => '15.42', // result of 11.60 + 3.82
),
1 =>
array (
'total_price' => '20.000000',
'total_percent' => '0.21',
'vat_code' => 4,
'discount_percent' => '4.00',
),
)
编辑:在我试过的代码下面。
$rate_quantity_per_price = array();
$vat_code = intval($product_detail['tax_rate']);
$total_products = $order->total_products;
$discount_neat = $order->total_discounts_tax_excl; //
$quantity_row = $product_detail['product_quantity'];
$quantity_per_price = $product_detail['total_price_tax_excl'];
$row_total_price = $quantity_per_price / $total_products;
$item_row_total_percent = number_format($row_total_price, 2, '.', '');
$discount_splitted = $discount_neat * $row_total_price;
$row_discount_splitted = number_format($discount_splitted, 2, '.', '');
$row_product[] = array('total_price' => $quantity_per_price,
'total_percent' => $item_row_total_percent,
'vat_code' => $vat_code,
'discount_percent' => $row_discount_splitted);
if(!array_search($vat_code, $row_product)){
$rate_quantity_per_price[$vat_code] = $quantity_per_price;
$rate_total_price[$vat_code] = $item_row_total_percent;
$rate_discount_row[$vat_code] = $row_discount_splitted;
} else {
$rate_quantity_per_price[$vat_code] += $quantity_per_price;
$rate_total_price[$vat_code] += $item_row_total_percent;
$rate_discount_row[$vat_code] += $row_discount_splitted;
}
感谢您的支持 :-)
解决方案
使用foreach
循环迭代
foreach($a as $v){
isset($group[$v['vat_code']]) ?
($group[$v['vat_code']]['total_price'] += $v['total_price'] AND
$group[$v['vat_code']]['total_percent'] += $v['total_percent'] AND
$group[$v['vat_code']]['discount_percent'] += $v['discount_percent']
)
:
($group[$v['vat_code']] = $v);
}
print_r(array_values($group));
工作示例:- https://3v4l.org/Fp1hu
推荐阅读
- python-3.x - 如何调整从 cv2.imshow() 获得的窗口大小?
- r - 如何创建一个堆叠条形图,其中每个条形都是不同的变量?在 R 中
- c - 在 C 中使用套接字编程的简单 HTTP 服务器在 Chrome 上失败
- python - 在我的函数中使用 Google 应用密码发送电子邮件时出现问题
- python - 一致地将日期变量更改为新格式
- google-apps-script - 如何仅检索谷歌表格上可见的内容 - 仅获取过滤后的记录
- android - Firebase Firestore 回收器视图适配器复制每个文档的列表
- regex - 正则表达式匹配不确定数量的前缀
- msg - 需要 Windows 10 家庭版 msg.exe 的子程序
- angular - 尝试在生产中构建 Angular 应用程序时出现数据表错误