2017-06-22 5 views
1

私は配列として持ち込み、広告タイプの列に基づいてグループ化された表データを表示しようとしています。PHP 5.6 1列をグループ化してassoc配列の列を合計しようとしています

広告タイプの列には8,000以上のエントリがありますが、広告タイプは3〜5種類のみです。

以下のコードは、8,000以上のレコードをすべて正しい表形式にしています。

広告タイプの固有のリストに基づいてインプレッション数、クリック数、合計金額を得るのに役立つ人はいますか?

public function get_awdapi_adsType($mcc){ 
    ini_set("memory_limit","256M"); //increases the memory for large data processing 
    global $tableView; 

    $csv = array_map('str_getcsv', file('../../clients/client_reports/ads/' . $mcc . '_LAST_6_MONTHS___ad.csv')); 
    array_walk($csv, function(&$a) use ($csv) { 
     $a = array_combine($csv[0], $a); 
    }); 
    array_shift($csv); # remove column header 

     foreach($csv as $key){ 
      //trying to sum impressions based unique list of ad types 
      $adType = $key['Ad type']; 

      $impressions = $key['Impressions']; 
      $clicks = $key['Clicks']; 
      $cost = $key['Cost']; 

      $adTypeData[] = '<tr><td>' . $adType . '</td><td>' . $impressions . '</td><td>' . $clicks . '</td><td>' . $cost . '</td></tr>';   

     } 

     $tableView = implode('', $adTypeData); 
     return $tableView; 
} 

ADDEDアレイ出力(合計しようと[インプレッション数、クリック数、費用] [広告タイプ]でグループ化された)

アレイ([0] =>アレイ([月] => 2017- 01-01 [広告グループ] =>プライベートレンダー[広告グループ] => ENABLED [広告タイプ] => TEXT_AD [キャンペーン] => RCN CT [キャンペーンの状態] => Status_Active [最終URL] => ["http://www.rcncapital.com" ] [Criteria Type] => KEYWORD [説明] => - [説明行1] =>プライベートダイレクトレンダー$ 50k最低[説明行2] =>不動産ローン:今日適用![表示URL] => www .RCNCapital.com [Ad] => CTプライベートマネーレンダー[Headline 1] => - [Headline 2] => - [Ad ID] => 45005996629 [A d状態] => Status_Enabled [すべてのconv。レート] => 0.00%[すべてのコンバージョン] => 0.00 [すべてのコンバージョン率]値] => 0.00 [Avg。コスト] => 0 [Avg。 CPC] => 0 [Avg。 CPM] => 0 [Avg。 CPV] => 0 [Avg。 position] => 2.0 [Clicks] => 0 [Conv。レート] => 0.00%[コンバージョン数] => 0.00 [合計コンバージョン数]値] => 0.00 [コスト] => 0 [コスト/コンバージョン] => 0 [クリック率] => 0.00%[インプレッション] => 1 [インタラクション率] => 0.00%[インタラクション] => 0 [ => - [View rate] => 0.00%[Views] => 0)[1] =>配列([Month] => 2017-03-01 [広告グループ] =>ハードマネー、ローン+貸し手[ [キャンペーンの状態] => Status_Active [最終URL] => ["http://www.rcncapital.com/?utm_source=google&utm_medium=cpc&utm_campaign=RCN%20-%20Hard%20Money%2C%20s%20-%20NY"] [条件タイプ] => [広告タイプ] => ENABLED [広告タイプ] => EXPANDED_AD [キャンペーン] => > KEYWORD [説明] => - [説明行1] =>実証済みの直接貸し手$ 50k - $ 2.5M + [説明行2] =>クイックプロセス。オンラインで今日適用[表示URL] => rcncapital.com/hard [広告の見出し2] => - [広告ID] => 48352191589 [広告の状態] => Status_Paused [すべてのコンバージョン率] => 0.00 [すべてのコンバージョン] => 0.00 [すべてのコンバージョン値] => 0.00 [平均コスト] => 0 [平均CPC] => 0 [平均インプレッション単価] => 0 [ ] => 0 [平均掲載順位] => 1.5 [クリック数] => 0 [コンバージョン率] => 0.00%[コンバージョン数] => 0.0 0 [合計コンバージョン数値] => 0.00 [コスト] => 0 [コスト/コンバージョン] => 0 [クリック率] => 0.00%[インプレッション] => 2 [インタラクション率] => 0.00%[インタラクション] => 0 [インタラクションの種類] => - [表示速度] => 0.00 [ビュー] => 0)[2] =>配列...

+0

は、私が作成$のcsvにするvarダンプの出力の一部を参照してくださいでしたMySQLでは、あなたはでそれを行います5行目? –

+0

がorgの配列出力を追加しました。質問。ご協力いただきありがとうございます。 –

+0

答えがうまくいく場合は、答えを受け入れることができますか? –

答えて

0

通常、データベースはこの種のものには適していますが、PHPでは可能性:

foreach($csv as $value){ 
    @$newarray[$value['adType']]['Impressions'] += $value['Impressions']; 
    @$newarray[$value['adType']]['Clicks'] += $value['Clicks']; 
    @$newarray[$value['adType']]['Cost'] += $value['Cost']; 
} 

$ NEWARRAYは今、私はトンと思うあなたの他のパラメータ

foreach($newarray as $key=>$value){ 
    $adTypeData[] = '<tr><td>' . $key. '</td><td>' . $value['Impressions'] . '</td><td>' . $value['Clicks']. '</td><td>' . $value['Cost']. '</td></tr>';   
} 

のそれぞれの和として値でADTYPEをキーとします彼は正しい方法は、この種のクエリのために作られたデータベースにcsvファイルをロードすることです。特にこれをやり直さなければならない場合は特にそうです。

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 

mysql credit here

あなたは、単純な書き込みのように見えるのクエリになります:

Select `adType`, sum(`Impressions`), sum(`clicks`), sum(`Costs`) from `your_ads_report_table` group by `adType` 
関連する問題