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
        )

)