2013-11-24 65 views
2

我從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)) 

在conclosion只有一條記錄我要總結與同一天,同一個頁面 的條目(我的最佳解決方案會得到2個陣列一個與總和所有的頁面和一個詳細的頁面總和)的

+0

告訴我們你已經試過 –

+0

更新了我的代碼.. – j0shyz

回答

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; 
} 

對於數組中的每個項目,首先使用substr截取timestamp字段的時間部分。使用日期值作爲結果數組的鍵,使用相同的日期值添加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 
     ) 

) 

在那裏,希望它幫助!