2011-12-19 61 views
1

我使用PHP,我將數據從幾個不同的數據源拉組織了許多PHP數據數組:最有效的方法來創建報告編制日期

  1. 從谷歌Analytics(分析)

    數據

  2. 從我們的MySQL數據庫

  3. 數據數據從我們ElasticSearch系統

結果是我有8個左右的PHP陣列爲期30天。有些陣列有30個元素,每個元素代表30天內的一天,有些陣列的行數較少(因爲某一天沒有活動)。

什麼是最明智的方式來列表數據?我想到的最直接的解決方案是循環查看報告的日期(即for($startDate = x, $startDate < $endDate, $startDate + 1 day)),然後每天查找每個數組中的對應值。這種方法的問題是,我將有一個for循環30次,每個循環將通過8個數據陣列循環多達30次...

有什麼建議嗎?

樣品陣列:http://bin.cakephp.org/view/953092822

回答

0

遍歷數據數組第一,並將其​​轉化到一些統一的格式,按日期索引。之後 - 一切都取決於你想要如何顯示數據,但因爲它會被日期索引,所以最好以你能想到的方式處理。

1

有點骯髒的解決方案,但我認爲它是適當的。一段代碼來說明總體思路:

$date1 = '2011-12-19'; 
$date2 = '2011-12-20'; 
$date3 = '2011-12-21'; 
$array1 = array($date1=>array('res1'=>'asdasdasd'),$date2=>array('res1'=>'qweqweqweqwe')); 
$array2 = array($date1=>array('res2'=>'123123123'),$date3=>array('res2'=>'456456456')); 

$res = array_merge_recursive($array1,$array2); 
var_dump($res); 

所以,這個想法是讓你的陣列將數據存儲在具有獨特的密鑰元素,而且比使用array_merge_recursive所有的數據收集有。所以,爲了讓它工作,你需要用類似的方式預處理你的數據:

$arr = array($date1=>'qweqwe', $date2=>'asdasd'); 

foreach($arr as $key=>$value){ 
    $arr[$key]=array('<unique source name here>'=>$value); 
}