2017-02-03 2 views
1

У меня есть один многомерный массив. Которая содержит продажи и ценность rdsales. Мне нужно создать новый массив, который является суммой этих двух массивов.Как суммировать одинаковые значения ключей и комбинировать другие значения в многомерном массиве в PHP?

enter image description here

Значение ключа 3 продажи будет добавить значение ключа 3 rdsales и то же самое для ключа 4. Держите клавишу 1, как сейчас.

Final Array Like 

[sum_rdsales_sales] => Array 
     (
      [brand] => Array 
       (
        [1] => Array 
         (
          [total_qty] => 3.000 
          [total_amt] => 91500.00 
         ) 

        [3] => Array 
         (
          [total_qty] => 12.020 
          [total_amt] => 336600.00 
         ) 

        [4] => Array 
         (
          [total_qty] => 6.240 
          [total_amt] => 124800.00 
         ) 

       ) 

      [sales_value] => 552900 
     ) 
+0

показать, как должен выглядеть окончательный массив – RomanPerekhrest

+0

Спасибо @RomanPerekhrest. Я просто добавил значение конечного массива. – SushilKumar

ответ

1

Используйте следующий подход (используемые функции: array_sum, array_column):

$arr = [ 
    'sales' => ['brand'=> [ 
     3 => ['total_qty'=> 12.000, 'total_amt'=> 336000.00], 
     4 => ['total_qty'=> 1.240, 'total_amt'=> 24800.00], 
     ], 'sales_value' => 360800], 
    'rdsales' => ['brand'=> [ 
     1 => ['total_qty'=> 3.000, 'total_amt'=> 91500.00], 
     3 => ['total_qty'=> 0.020, 'total_amt'=> 600.000], 
     4 => ['total_qty'=> 5.000, 'total_amt'=> 100000.00], 
     ], 'sales_value' => 192100],  
]; 

$result = []; 
$result['sum_rdsales_sales'] = [ 
    'brand' => [], 
    'sales_value' => array_sum(array_column($arr, 'sales_value'))]; 

// `$prevalent_arr` is the array which has larger amount of elements 
if ((count($arr['sales']['brand']) > count($arr['rdsales']['brand']))) { 
    $prevalent_arr = $arr['sales']['brand']; 
    $compared_arr = $arr['rdsales']['brand']; 
} else { 
    $prevalent_arr = $arr['rdsales']['brand']; 
    $compared_arr = $arr['sales']['brand']; 
} 

foreach ($prevalent_arr as $k => $v) { 
    if (isset($compared_arr[$k])) {   
     $result['sum_rdsales_sales']['brand'][$k]['total_qty'] = $prevalent_arr[$k]['total_qty'] + $compared_arr[$k]['total_qty']; 
     $result['sum_rdsales_sales']['brand'][$k]['total_amt'] = $prevalent_arr[$k]['total_amt'] + $compared_arr[$k]['total_amt']; 
    } else { 
     $result['sum_rdsales_sales']['brand'][$k] = $prevalent_arr[$k]; 
    } 
} 

print_r($result); 

Выход:

Array 
(
    [sum_rdsales_sales] => Array 
     (
      [brand] => Array 
       (
        [1] => Array 
         (
          [total_qty] => 3 
          [total_amt] => 91500 
         ) 

        [3] => Array 
         (
          [total_qty] => 12.02 
          [total_amt] => 336600 
         ) 

        [4] => Array 
         (
          [total_qty] => 6.24 
          [total_amt] => 124800 
         ) 

       ) 

      [sales_value] => 552900 
     ) 
) 
+0

Спасибо за ваши идеи. Я получил помощь от этого ответа. Согласно моему текущему вопросу, ваш ответ правильный, но у меня есть ситуация, когда «продажи» и «rdsales» имеют разные ключи, такие как «продажи», имеющие один ключ, который «1» и «rdsales» имеет один ключ, который равен «3». В этом случае решение не будет работать. Но спасибо за ваш повтор. У меня есть идея и решить мою проблему. Еще раз спасибо :) – SushilKumar

0

Все сталкиваются с различными другая ситуация в моем случае. Рабочий код

foreach($depots as $depot){ 
    $depotid = $depot['Depot']['id']; 
    if(isset($reportData[$depotid])){ 
     $sales_value = 0; 
    // brand merging and sum of total amount for sale and rdsales 
    foreach($brands as $key=>$brand){ 
    if(isset($reportData[$depotid]['sales']['brand'][$key]) && isset($reportData[$depotid]['rdsales']['brand'][$key])){ 
     if(array_key_exists($key, $reportData[$depotid]['sales']['brand']) && array_key_exists($key, $reportData[$depotid]['rdsales']['brand'])){ 
     $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_qty'] = $reportData[$depotid]['sales']['brand'][$key]['total_qty']+ $reportData[$depotid]['rdsales']['brand'][$key]['total_qty']; 
     $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_amt'] = $reportData[$depotid]['sales']['brand'][$key]['total_amt']+ $reportData[$depotid]['rdsales']['brand'][$key]['total_amt']; 
     $sales_value += $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_amt']; 
     } 
    } 
    else{ 
     if(isset($reportData[$depotid]['sales']['brand'][$key])){ 
     if(array_key_exists($key, $reportData[$depotid]['sales']['brand'])){ 
     $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_qty'] = $reportData[$depotid]['sales']['brand'][$key]['total_qty'] ; 
     $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_amt'] = $reportData[$depotid]['sales']['brand'][$key]['total_amt']; 
     $sales_value += $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_amt']; 
     } 
     } 
     if(isset($reportData[$depotid]['rdsales']['brand'][$key])){ 
     if(array_key_exists($key, $reportData[$depotid]['rdsales']['brand'])){ 
     $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_qty'] = $reportData[$depotid]['rdsales']['brand'][$key]['total_qty'] ; 
     $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_amt'] = $reportData[$depotid]['rdsales']['brand'][$key]['total_amt']; 
     $sales_value += $reportData[$depotid]['sale_redis_add']['brand'][$key]['total_amt']; 
     } 
     } 
    } 
    } 
    // total sale and rdsales value for a depot 
    $reportData[$depotid]['sale_redis_add']['sales_value']=$sales_value; 
    } 
    } 
Смежные вопросы