2017-02-03 5 views
1

私は1つの多次元配列を持っています。これには売上と売上高の価値が含まれます。私はこれらの2つの配列の合計である新しい配列を作成する必要があります。販売の主要3のPHPで同じキー値を合計し、他の値を多次元配列で結合する方法はありますか?

enter image description here

値は、それが今であるように、キー1をキープキー4. のキーrdsalesの3と同じの値を追加します。

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_sumarray_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

あなたのアイデアをありがとう、私はこの答えから助けを得ました。私の現在の質問によるとあなたの答えは正しいですが、私は、 "sales"と "sales"のような "sales"と "rdsales"が1つのKeyが "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; 
    } 
    } 
関連する問題