2012-02-01 50 views
0

我想采取以下数组,并生成一个新的数组,将所有具有相同ID的相同的键分组,同时获得视图的SUM和抓取仅限最后的DATE。生成一个新的数组按键分组,并获得另一个键的总和

原始数组

Array (
[0] => Array (
     [id] => 10 
     [views] => 276 
     [date] => 2012-01-30 10:55:00 
     [total] => N 
    ) 
[1] => Array (
     [id] => 40 
     [views] => 287 
     [date] => 2012-01-27 10:00:29 
     [total] => Y 
    ) 
[2] => Array (
     [id] => 40 
     [views] => 824 
     [date] => 2012-01-29 14:40:45 
     [total] => Y 
    ) 
[3] => Array (
     [id] => 42 
     [views] => 723 
     [date] => 2012-01-28 20:15:58 
     [total] => N 
    ) 
[4] => Array (
     [id] => 43 
     [views] => 428 
     [date] => 2012-01-28 17:14:31 
     [total] => N 
    ) 
[5] => Array (
     [id] => 45 
     [views] => 174 
     [date] => 2012-01-20 18:01:11 
     [total] => N 
    ) 
) 

新阵列

Array (
[0] => Array (
     [id] => 10 
     [views] => 276 
     [date] => 2012-01-30 10:55:00 
     [total] => N 
    ) 
[1] => Array (
     [id] => 40 
     [views] => 1111 
     [date] => 2012-01-29 14:40:45 
     [total] => Y 
    ) 
[2] => Array (
     [id] => 42 
     [views] => 723 
     [date] => 2012-01-28 20:15:58 
     [total] => N 
    ) 
[3] => Array (
     [id] => 43 
     [views] => 428 
     [date] => 2012-01-28 17:14:31 
     [total] => N 
    ) 
[4] => Array (
     [id] => 45 
     [views] => 174 
     [date] => 2012-01-20 18:01:11 
     [total] => N 
    ) 
) 
+0

什么 “总” 场? – cambraca 2012-02-01 17:10:05

+0

那是我在尝试自己做这件事时添加的内容。总值与Y意味着它是一个多重ID和总元素。之后我有点不满意。会挑战你发布的答案。 – Tim 2012-02-01 17:13:10

+0

我没有测试它,但它至少会给你一个出发点。 (然后,它可以正常工作:)) – cambraca 2012-02-01 17:24:15

回答

0
function last($a, $b) { 
    if (strtotime($a) > strtotime($b)) 
    return $a; 
    else 
    return $b; 
} 

$new_array = array(); 
foreach ($original_array as $data) { 
    if (array_key_exists($data['id'], $new_array)) { 
    $new_array[$data['id']]['views'] += $data['views']; 
    $new_array[$data['id']]['date'] = last($new_array[$data['id']]['date'], $data['date']); 
    } else 
    $new_array[$data['id']] = $data; 
} 
$new_array = array_values($new_array); 
+0

美丽......我非常感谢你!像魅力和快速工作。我很担心解析,因为它们中有很多被过滤,而不是这种情况。再次感谢 – Tim 2012-02-01 17:34:21

相关问题