2013-07-22 2 views
0

Я пытаюсь создать функцию, которая захватывает все дни, которые имеют события, которые находятся в базе данных для определенного пользователя. Например, если бы 23 января 2013 года было два события, это добавило 23 января 2013 года в массив. Я получил его для работы, поэтому он добавляет все дни (без добавления в тот же день дважды), но теперь я хочу сказать, сколько дат на каждый день. Таким образом, 23 января 2013 года он сказал, что у них есть два события в этот день.Приращение значения в массиве php

Надеюсь, это имеет смысл ... У меня есть код для дальнейшей помощи.

PHP Функция (захватывая каждый день, который имеет событие)

//gets upcoming days that have events for a user 
    public function get_upcoming_days_with_events() { 
     $return_array = array(); 
     $date_in=null; 
     $user_id = $this->session->userdata('id'); 
     $query =$this->db->select()->from('events')->where('user_id', $user_id)->get(); 
     foreach ($query->result_array() as $event => $row) { 
      $date = strtotime($row['date_due']); 
      if (sizeof($return_array) != 0) { 
       foreach ($return_array as $date_in_array => $row) { 
        $d = $row['full_date']; 
        if (date('Y-m-d', $date) == $d) { 
         //date is already in array 
         //increment the number of assignments on this day 
         $row['number_of_assignments'] += 1; 
         $date_in = true; 
        } else{ 
         $date_in = false; 
        } 
       } 
      } 
      if ($date_in == false) { 
       $return_array[] = array(
        'day' => date('d', $date), 
        'month' => date('m', $date), 
        'full_date' => date('Y-m-d', $date), 
        'number_of_assignments' => 1 
       ); 
      } 
     } 
     return $return_array; 
    } 

Так с этим я хочу, чтобы иметь возможность увеличить $ return_array [ «number_of_assignments»], если моя функция замечает, что определенный день имеет более чем один мероприятие.

Позвольте мне знать, если вам нужно больше информации ...

Спасибо! :)

+0

Ваш 'return_array' кажется пустым, как вы передаете значения? – Starx

+0

Мы можем сохранить информацию в 'return_array' по индексу' date', если информация даты не была установлена ​​в 'return_array', мы делаем пустую информацию. Каждый раз мы просто увеличиваем 'number_of_assignments'. Надеюсь, мой код будет полезен. Любой вопрос, не стесняйтесь комментировать здесь. – srain

ответ

1

Мы можем сохранить информацию в return_array по индексу date, если информация о дате не была установлена ​​в return_array, мы делаем пустую информацию. Каждый раз мы просто увеличиваем number_of_assignments.

public function get_upcoming_days_with_events() 
{ 
    $return_array = array(); 
    $user_id = $this->session->userdata('id'); 
    $query =$this->db->select()->from('events')->where('user_id', $user_id)->get(); 
    foreach ($query->result_array() as $event => $row) 
    { 
     $date = strtotime($row['date_due']); 
     $date_key = date('Y-m-d', $date); 
     if (!isset($return_array[$date_key])) 
     { 
      $new_item = array(
       'day' => date('d', $date), 
       'month' => date('m', $date), 
       'full_date' => $date_key, 
       'number_of_assignments' => 0, 
      ); 
      $return_array[$date_key] = $new_item; 
     } 
     $return_array[$date_key]['number_of_assignments']++; 
    } 
    $return_array = array_values($return_array); 
    return $return_array; 
} 
0

Функция: array_count_values() может помочь вам с этим, он дает общее количество видимости значения в массиве.

Например:

$a = array("apple", "banana", "apple"); 
var_dump(array_count_values($a)); 

Выведет

array(
    [apple] => 2, 
    [banana] => 1 
); 

Так вместо того, чтобы пытаться отфильтровать повторяющиеся события, добавьте их все на массиве, а затем использовать array_count_values() наконец, чтобы узнать их occurenses.

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