2016-06-17 13 views
0

タグの関連付けに基づいてユーザーの関心を予測しています。これらの関連付けは、ChartJSを使用して複数行のグラフにプロットされます。私は、データ形式がクライアント側でほぼ使用できるようになっているところに着いた。PHPで高度な配列を再構築する

アレイのサイズによって脅かされることはありません。私の質問はやや単純ですが、解決するのは難しいですね。

は、(例えば、データを含む)次の配列を考えてみましょう:

array:3 [▼ 
    "timespan" => "day", 
    "labels" => array:3 [▼ // Date labels based on timespan 
    0 => "2016-06-10" 
    1 => "2016-06-11" 
    2 => "2016-06-12" 
    ], 
    "data" => array:2 [▼ 
    0 => array:3 [▼ 
     "id" => 16473, 
     "name" => "FooTag" 
     "timeline" => array:3 [▼ 
     0 => array:3 [▼ 
      "Date" => "2016-06-10" 
      "Frequency" => 2 
      "Score" => 4.0 
     ] 
     1 => array:3 [▼ 
      "Date" => "2016-06-12" 
      "Frequency" => 2 
      "Score" => 4.0 
     ] 
     ] 
    ] 
    1 => array:3 [▼ 
     "id" => 10814, 
     "name" => "BarTag" 
     "timeline" => array:1 [▼ 
     0 => array:3 [▼ 
      "Date" => "2016-06-10" 
      "Frequency" => 2 
      "Score" => 3.0 
     ], 
     1 => array:3 [▼ 
      "Date" => "2016-06-11" 
      "Frequency" => 10 
      "Score" => 20.0 
     ] 
     ] 
    ] 
    ] 
] 

...すべての日付ラベル(2016年6月10日、206-06-11、2016年6月12日)が覆われていることを確認してくださいdata[i][timeline]のタイムラインごとにその特定の日付ラベルのタイムラインで利用可能なデータがない場合は、空の配列を挿入する必要があります。

結果は次のようになります。この場合

array:3 [▼ 
    "labels" => array:3 [▼ // Date labels based on timespan 
    0 => "2016-06-10" 
    1 => "2016-06-11" 
    2 => "2016-06-12" 
    ] 
    "timespan" => "day" 
    "data" => array:2 [▼ 
    0 => array:3 [▼ 
     "id" => 16473, 
     "name" => "FooTag" 
     "timeline" => array:3 [▼ 
     0 => array:3 [▼ 
      "Date" => "2016-06-10" 
      "Frequency" => 2 
      "Score" => 4.0 
     ], 
     1 => array:0 [], // No data for label 2016-06-11, empty array added 
     2 => array:3 [▼ 
      "Date" => "2016-06-12" 
      "Frequency" => 2 
      "Score" => 4.0 
     ] 
     ] 
    ] 
    1 => array:3 [▼ 
     "id" => 10814, 
     "name" => "BarTag" 
     "timeline" => array:1 [▼ 
     0 => array:3 [▼ 
      "Date" => "2016-06-10" 
      "Frequency" => 2 
      "Score" => 3.0 
     ], 
     1 => array:3 [▼ 
      "Date" => "2016-06-11" 
      "Frequency" => 10 
      "Score" => 20.0 
     ], 
     2 => array:0 [], // No data for label 2016-06-12, empty array added 
     ] 
    ] 
    ] 
] 

すべての関連するタグは、すべての日付のデータを有しています。それ以外の場合は、グラフをプロットするときにデータ(頻度とスコア)が適切な日付と一致しません。

私はこのことを願っています。前もって感謝します! $array['labels']を想定し

+2

は、結果は[ 'array_splice'](HTTPを含むことになるような音: //php.net/manual/en/function.array-splice.php)。単一の '$ timeline'配列と単一の' $ labels'配列だけを扱っているかのように、これを解決してください。一度それがうまくいけば、少し楽になるはずです。 –

答えて

1

は、日付の決定的なリストであり、そして$array['data'][$i]['timeline']は常に昇順にソートされ、決して$array['labels']にない日付を含んでいない:

$labels = $array['labels']; 

foreach ($array['data'] as &$tag) { 
    foreach ($labels as $i => $date) { 
     if (!isset($tag['timeline'][$i]) || $tag['timeline'][$i]['Date'] != $date) { 
     $blank = []; 
     array_splice($tag['timeline'], $i, 0, [$blank]); 
     } 
    } 
} 
+0

正しいですが、正しいです。あなたの答えは素晴らしいですし、魅力のように動作します! – JasonK

関連する問題