我从datebase获取此日期
Array
(
[0] => Array
(
[page] => login
[timestamp] => 2013-11-06 12:06:30
)
[1] => Array
[page] => changepage
[timestamp] => 2013-11-06 12:06:31
)
依旧......
我想计算当天的参赛作品
Array
(
[0] => Array
(
[timestamp] => 2013-11-06 // only by the same day..
[count] => 4
)
)
甚至
Array
(
[0] => Array
(
[timestamp] => 2013-11-06
[login] => 2
[changepage] => 4
)
)
我试过
function format($data)
{
$dates = array();
for ($i = 0; $i < count($data); $i++)
{
if ($data[$i]['page'] == 'login')
{
if (!isset($dates[explode(' ', $data[$i]['timestamp'])[0]]))
array_push($dates, array('date' => explode(' ', $data[$i]['timestamp'])[0], 'login' => 1));
else
{
foreach ($dates as $date) {
if ($date['date'] == explode(' ', $data[$i]['timestamp'])[0])
$date['login'] += 1;
}
}
}
return $dates;
}
但这只给我一个
记录 Array( Array ( 'timestamp' => '2013-11-06', 'login' => 1) )
总之,我想在同一天和同一页面上对条目求和 (我最好的解决方案是获得2个阵列,其中一个是所有页面的总和,另一个是详细的页面总和)
答案 0 :(得分:1)
以下是您问题的解决方案:
function format($data) {
$result = array();
foreach ($data as $item) {
$date = substr($item['timestamp'], 0, 10);
@$result[$date]['timestamp'] = $date;
@$result[$date][$item['page']]++;
}
sort($result);
return $result;
}
对于数组中的每个项目,它首先使用timestamp
截断substr
字段的时间部分。使用日期值作为结果数组的键,使用相同的日期值添加timestamp
字段,并增加其他字段的值(包含页面名称)。当密钥(索引)不存在时,我在这里使用@运算符来防止通知错误。
处理完所有项目后,对结果数组进行排序,将键更改为数字索引,然后变为常规数组。
这是我运行的测试:
$data = array(
array(
'page' => 'login',
'timestamp' => '2013-11-06 12:06:30'
),
array(
'page' => 'changepage',
'timestamp' => '2013-11-06 12:06:45'
),
array(
'page' => 'login',
'timestamp' => '2013-11-06 13:06:30'
),
array(
'page' => 'changepage',
'timestamp' => '2013-11-06 14:06:45'
),
array(
'page' => 'changepage',
'timestamp' => '2013-11-06 14:06:50'
),
array(
'page' => 'login',
'timestamp' => '2013-11-07 12:06:30'
),
array(
'page' => 'changepage',
'timestamp' => '2013-11-07 12:06:45'
)
);
print_r(format($data));
安达的输出是:
Array
(
[0] => Array
(
[timestamp] => 2013-11-06
[login] => 2
[changepage] => 3
)
[1] => Array
(
[timestamp] => 2013-11-07
[login] => 1
[changepage] => 1
)
)
在那里,希望它有所帮助!