2013-11-24 2 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; 
} 

Для каждого элемента массива он сначала обрезает временную часть поля 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)); 

Anda выход:

Array 
(
    [0] => Array 
     (
      [timestamp] => 2013-11-06 
      [login] => 2 
      [changepage] => 3 
     ) 

    [1] => Array 
     (
      [timestamp] => 2013-11-07 
      [login] => 1 
      [changepage] => 1 
     ) 

) 

Там, надеюсь, что это помогает!

Смежные вопросы