2017-12-25 10 views
-1

(クリスマスの食事の間)私は再びロジックと配列とループを介してループに立ち往生しています。 は、ここで私はGoogleのチャートのためのPHP配列;ループスルー配列とグループによって2

$aTest = Array 
(
    Array 
     (
      'date' => 2017-05-04, 
      'period' => 'period2', 
      'category' => 'Indoor room', 
      'score' => 1 
     ), 

    Array 
     (
      'date' => 2017-05-04, 
      'period' => 'period5', 
      'category' => 'Indoor room', 
      'score' => 1 
     ), 

    Array 
     (
      'date' => 2017-05-04, 
      'period' => 'period2', 
      'category' => 'Indoor room', 
      'score' => 2 
     ), 

    Array 
     (
      'date' => 2017-05-04, 
      'period' => 'period4', 
      'category' => 'Indoor room', 
      'score' => 1 
     ), 

    Array 
     (
      'date' => 2017-05-03, 
      'period' => 'period5', 
      'category' => 'Gym Class', 
      'score' => 1 
     ), 

    Array 
     (
      'date' => 2017-05-03, 
      'period' => 'period1', 
      'category' => 'Gym Class', 
      'score' => 1 
     ), 

    Array 
     (
      'date' => 2017-05-03, 
      'period' => 'period4', 
      'category' => 'Indoor room', 
      'score' => 1 
     ) 
     ); 

私はカテゴリ別にグループを好きで、期間によってスコア群を合計し、この時間を与えられています配列です。 Y軸がカテゴリになり、X軸が期間になります。カテゴリ別

foreach ($aTest as $value) { 
      //echo $value['period'].' - '.$value['score'].'<br/>'; 

      if (empty($output[$value]['period'])) 
       $output[$value]['period'] = ['Period1' => 0, 'Period2' => 0, 'Period3' =>0, 'Period4' => 0, 'Period5' => 0]; 

    if(empty($output[$value]['category'])) 
     $output[$value['catgeory']] = ['Gym Class' => 0, 'Indoor room' =>0]; 

      $output[$value['category']] += $value['score']; 
     } 

     ksort($output); 

が、これだけの合計スコアではなく期間によって:最後に、私は、私はこのPHPコードを持っているGoogleのチャート

/*period, total indoor, total gym, 'total indoor', 'total gym'*/ 
array(
['Period1', 0,1,'0','1'], 
['Period2', 3,0,'3','0'], 
['Period3', 0, 0,'0','0'], 
['Period4', 4,0,'4','0'], 
['Period5', 1,1,'1','1'] 
) 

のためにこれを必要とします。 私はピリオドもループする必要があると思いますが、どうですか?

答えて

1
  • ここで間違ったロジックがあります。私はあなたがいずれかを持っていないことがわかりました$値が配列であり、あなたが$出力[$値]

    • をチェックしようという

    if (empty($output[$value]['period'])) 
           $output[$value]['period'] = ['Period1' => 0, 'Period2' => 0, 'Period3' =>0, 'Period4' => 0, 'Period5' => 0]; 
    

    行合計期間値。

  • 私はあなたのデータのための解決策を持っています。 私のコードは何ですか?

  • それぞれについてカテゴリ

  • によって期間の合計スコアは、
  • 値これらのカテゴリスコアの位置を設定する arraySortカテゴリを使用してアレイに 期間カテゴリスコアをマージ
$temp = []; 
$output = []; 
foreach($aTest as $value){ 
    $period = $value['period']; 
    $category = $value['category']; 

    // Create default values 
    if (empty($temp[$period])){ 
     $temp[$period] = []; 
    } 
    if(empty($temp[$period][$category])){ 
     $temp[$period][$category] = 0; 
    } 
    //Sum score 
    $temp[$period][$category] += $value['score']; 
} 

//After Forech we have an array with ['period name' => ['category name' => score]]; 
//Sort values of the category change it if you want, you can add more option such as (item type for add '' to values) 
$arraySort = [ 
    "Indoor room", //total indoor, 
    "Gym Class", // total gym, 
    "Indoor room", //'total indoor', 
    "Gym Class" //'total gym' 
]; 
foreach($temp as $period => $catsScore){ 
    $periodItem = [$period]; 
    foreach($arraySort as $cat){ 
     $periodItem[] = $catsScore; 
    } 
    $output[] = $periodItem; 
} 
+0

あなたは私の多くを助けてくれます。私の実際の配列用に書いたコードの最初の部分が必要だと思います。しかし、私はコード$ arraySortの2番目の部分を取得しません、ここで配列 '[0] =>配列の配列を取得します。 ( [0] => period1 [1] =>配列 ( [ジムクラス] => 1 ) [2] =>アレイ ( [ジム・クラス] => 1 ) )など」 私はあなたが提供したものを再読ウィル、私が持っているおかげ – alex

+1

第二の部分ソートこれらのカテゴリ理由私はいくつかの時間入力カテゴリが注文されていないと思います。 – HoangHieu

+0

それを試してみますが、最初の部分はすばらしい使い方です! – alex

関連する問題