Php 计数值发生和按日期分组
我从数据库里得到这个日期Php 计数值发生和按日期分组,php,sql,Php,Sql,我从数据库里得到这个日期 Array ( [0] => Array ( [page] => login [timestamp] => 2013-11-06 12:06:30 ) [1] => Array [page] => changepage [timestamp] => 2013-11-06 12:06:31 ) 等等 我想数一数同一天的参赛作品 Array (
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;
}
最后,我想把同一天同一页的条目加起来
(我的最佳解决方案是获得两个数组,一个包含所有页面的总和,另一个包含详细的页面总和)以下是您问题的解决方案:
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;
}
对于数组中的每个项,它首先使用substr
截断timestamp
字段的时间部分。使用日期值作为结果数组的键,使用相同的日期值添加一个时间戳
字段,并增加其他字段(包含页面名称)的值。我在这里使用@operator来防止在键(索引)还不存在时出现通知错误
处理完所有项后,对结果数组进行排序,将键更改为数字索引,然后它将成为一个常规数组
以下是我运行的测试:
$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));
Anda输出为:
Array
(
[0] => Array
(
[timestamp] => 2013-11-06
[login] => 2
[changepage] => 3
)
[1] => Array
(
[timestamp] => 2013-11-07
[login] => 1
[changepage] => 1
)
)
好了,希望有帮助 向我们展示您已使用我的代码更新的尝试。。
Array
(
[0] => Array
(
[timestamp] => 2013-11-06
[login] => 2
[changepage] => 3
)
[1] => Array
(
[timestamp] => 2013-11-07
[login] => 1
[changepage] => 1
)
)