我有一个如下所示的数组:
Array
(
[0] => Array
(
[id] => 2
[createdOn] => 2014-03-03 20:49:14
)
[1] => Array
(
[id] => 3
[createdOn] => 2014-05-06 08:29:47
)
[2] => Array
(
[id] => 4
[createdOn] => 2014-05-07 10:37:56
)
[3] => Array
(
[id] => 6
[createdOn] => 2014-06-01 09:11:58
)
[4] => Array
(
[id] => 7
[createdOn] => 2014-06-01 12:29:16
)
)
然而,我想要实现的是根据createdOn
日期计算记录在数组中出现的次数。如下所示:
Array
(
[0] => Array
{
[count] => 1
[createdOn] => 'March'
}
[1] => Array
{
[count] => 2
[createdOn] => 'May'
}
[2] => Array
{
[count] => 2
[createdOn] => 'June'
}
)
如何使用PHP获得此结果?
答案 0 :(得分:2)
这样就可以了解
$dates = array();
$dates[] = array('id' => 1, 'date' => '2014-03-01 12:29:16');
$dates[] = array('id' => 2, 'date' => '2014-03-01 12:29:16');
$dates[] = array('id' => 3, 'date' => '2014-04-01 12:29:16');
$dates[] = array('id' => 4, 'date' => '2014-05-01 12:29:16');
$dates[] = array('id' => 5, 'date' => '2014-06-01 12:29:16');
$dates[] = array('id' => 6, 'date' => '2014-06-01 12:29:16');
$counted = array();
array_walk_recursive($dates, function ($value, $key) use (& $counted) {
if ($key == 'date') {
$date = new DateTime($value);
$monthName = $date->format('M');
if (!isset($counted[$monthName])) {
$counted[$monthName] = array('createdOn' => $monthName, 'count' => 0);
}
$counted[$monthName]['count']++;
}
});
var_dump(array_values($counted));
答案 1 :(得分:0)
你实际上可以让PHP为你做繁重的工作,有你需要的所有功能的内置函数。使用array_column()我们可以删除除日期键之外的所有内容,array_map()负责正确的格式化。
$dates = array(
array('id' => 1, 'date' => '2014-03-01 12:29:16'),
array('id' => 2, 'date' => '2014-03-01 12:29:16'),
array('id' => 3, 'date' => '2014-04-01 12:29:16'),
array('id' => 4, 'date' => '2014-05-01 12:29:16'),
array('id' => 5, 'date' => '2014-06-01 12:29:16'),
array('id' => 6, 'date' => '2014-06-01 12:29:16'),
);
$format = function ($ts) {
return date_create($ts)->format('M');
};
$m = array_map($format, array_column($dates, 'date'));
最后,array_count_values()为我们提供了统计数据。
array_count_values($m) =>
Array
(
[Mar] => 2
[Apr] => 1
[May] => 1
[Jun] => 2
)
虽然如果你从sql查询中获取数据,那么最好只在那里进行聚合。