首页 > 解决方案 > 在数组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;
 }   

感谢您的支持 :-)

标签: phparrays

解决方案


使用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


推荐阅读