计算值发生次数和按日期分组

时间:2013-11-24 17:55:07

标签: php sql

我从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个阵列,其中一个是所有页面的总和,另一个是详细的页面总和)

1 个答案:

答案 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
        )

)

在那里,希望它有所帮助!