2011-08-24 62 views
0

我有一個數組,如:什麼是在PHP中生成這種壓縮數組的最佳方式?

$arr[0] = ("1-3-2011","1","15"); //date(dd-mm-yyyy),id,amt 
$arr[1] = ("1-4-2011","2","5"); 
$arr[2] = ("12-3-2011","6","20"); 
$arr[3] = ("1-3-2011","10","10"); 
$arr[4] = ("12-3-2011","3","10"); 
$arr[5] = ("1-4-2011","5","15"); 
$arr[6] = ("1-3-2011","7","15"); 

從這我需要生成的稠陣列等

$newarr[0] = ("1-3-2011","1,7,10","40"); 
$newarr[0] = ("1-4-2011","2,5","20"); 
.. 
... 

基本上,第一個是一個多維陣列中,包含日期,id和量。在新數組中,我需要將每個唯一日期的前一個壓縮,將重複日期的csv作爲csv字符串,並添加數量。

什麼是最有效的方式來做到這一點,性能明智嗎?

+0

最好將返工你的查詢,如果這個數據是從數據庫 –

回答

0

像這樣的東西應該這樣做:

$newarr = array(); 

foreach($arr as $row) { 
    if(!isset($newarr[$row[0]])) { 
     $newarr[$row[0]] = array('ids' => array(), 'amount' => 0); 
    } 
    $newarr[$row[0]]['ids'][] = $row[1]; 
    $newarr[$row[0]]['amount'] += $row[2]; 
} 

foreach($newarr as $key => &$row) { 
    $row = array($key, implode(',', $row['ids']), $row['amount']); 
} unset($row); 

工作例如:

http://codepad.org/UmiDKLYJ

+0

未來我認爲像http://codepad.org/2Sf0wlz0這樣的表現會更好,不那麼難看,並且使用正確的密鑰。 – XzKto

+0

你認爲我的回答錯了或沒有用,或者爲什麼downvote?你不應該因爲你認爲自己有更好的解決方案而低估了答案。相反,將您的解決方案作爲新答案發布,並讓帖子所有者和社區解決哪個更好。 –

+0

考慮到性能,我們的解決方案之間的差異可以忽略不計,至少有數百萬行需要考慮。關於醜陋的問題,我認爲我的答案更具可讀性並且不那麼令人困惑。 –

相關問題