2016-04-29 12 views
1

私はPHPで2D配列を持っていますが、PHPExcelを使用してEXCELシートに保存する前に、データを集計する必要があります。私のデータは既に国別にソートされています。各サブアレイには国名があります。私がしたいことは、国ごとにフィールド「LIVE」の合計数を追加することです。私のテーブルには、次のようになります。PHP 2次元配列を集計する方法

[ 
    [314] => Array 
      (
       [Country] => France 
       [provider] => HIberica 
       [status] => inactive 
       [# per status] => 1 
       [Live] => 0 
      ) 

     [315] => Array 
      (
       [Country] => France 
       [provider] => HIberica 
       [status] => active 
       [# per status] => 4223 
       [Live] => 4171 
      ) 

     [316] => Array 
      (
       [Country] => United States 
       [provider] => HarperC 
       [status] => pending 
       [# per status] => 69 
       [Live] => 0 
      ) 

     [317] => Array 
      (
       [Country] => United States 
       [provider] => HC 
       [status] => inactive 
       [# per status] => 2582 
       [Live] => 0 
      ) 

     [318] => Array 
      (
       [Country] => United States 
       [provider] => HC 
       [status] => active 
       [# per status] => 16217 
       [Live] => 16217 
      ) 

     [319] => Array 
      (
       [Country] => United States 
       [provider] => H UK 
       [status] => active 
       [# per status] => 70 
       [Live] => 70 
      ) 

] 

私はちょうどこのように、ライブフィールドの合計を保持するために各国のサブアレイを追加したい最終結果:

[320] => Array 
       (
        [Country] => United States 
        [provider] => All Providers 
        [status] => active 
        [# per status] => NULL 
        [Total Live] => 7000 # the total per country goes here 
       ) 

私が知っていますarray_walk_recursiveのようなPHP関数が助けてくれるかもしれませんが、どうやってそれを行うのか分かりません。

+0

だから、「LIVE」の値にはすべての国のLIVEの合計を保持したいと思っていますか? –

+0

@ArditMeti私は、各国の合計行(サブ配列)を追加したいのですが、それはその国のLIVEの総数を保持します。この点を明確にするために投稿を編集します。 – Amaynut

+0

あなたは再帰的な散歩は必要ありません。ちょうどループ。 'foreach($ arr $ id => $ child){$ total [$ child ['Country']] + = $ child ['Total Live']; } ' –

答えて

2

配列をループし、Countryをキーにしてライブを追加して一時的な結果を作成します。

foreach($array as $sub) { 
    if(!isset($result[$sub['Country']])) { 
     $result[$sub['Country']] = array('Country' => $sub['Country'], 
             'Total Live' => $sub['Live'], 
             'provider' => 'All Providers', 
             'status' => 'active', 
             '# per status' => 'NULL'); 
    } else { 
     $result[$sub['Country']]['Total Live'] += $sub['Live']; 
    } 
} 

$array = array_merge($array, array_values($result)); 
0

まずあなたが望むどのように一時的な配列を作成するよりも、国ごとにすべての生命を見つけて、ちょうどあなたの配列にプッシュ:それからちょうど元の配列に値をマージします。

$subArrOfLive = []; 
foreach($YOUR_ARR as $val){ 
    $currCountry = $val["Country"]; 
    $currLive = $val["Live"]; 

    if(!isset($subArrOfLive[$currCountry])) { 
     $subArrOfLive[$currCountry] = $currLive; 
    }else{ 
     $subArrOfLive[$currCountry] += $currLive; 
    } 

} 

foreach($subArrOfLive as $key => $val){ 
    $temp = array(
     "Country" => $key, 
     "provider" => "All Providers", 
     "status" => "active", 
     "# per status" => NULL, 
     "Total Live" => $val 
    ); 
    $YOUR_ARR[] = $temp ; 
} 
+0

' $ YOUR_ARR [$ key] ["Country"] 'の代わりに' $ val ["Country"] 'を使うのはどうですか? ... – AbraCadaver

+0

それは正しいそれは私が7時間働いていたことだけです:Pは疲れて、それを編集させてください –

+0

あなたは仕事中に投稿中です! – AbraCadaver