2011-08-24 71 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

考虑到性能,我们的解决方案之间的差异可以忽略不计,至少有数百万行需要考虑。关于丑陋的问题,我认为我的答案更具可读性并且不那么令人困惑。 –

相关问题