0

我正在尝试创建一个函数来获取某个用户在数据库中的所有事件。例如,如果 2013 年 1 月 23 日有两个事件,则将 2013 年 1 月 23 日添加到数组中。我让它工作,所以它增加了所有的日子(没有增加同一天两次)但现在我想能够说出每天有多少个日期。所以在 2013 年 1 月 23 日,他们会说那天他们有两个活动。

我希望这是有道理的......我有一些代码可以进一步帮助。

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'] 。

如果您需要更多信息,请告诉我...

谢谢!:)

4

2 回答 2

2

我们可以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;
 }
于 2013-07-22T02:27:36.020 回答
1

功能:array_count_values()可以帮助你解决这个问题,它给出了一个值在数组中出现的总数。

例如:

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

将输出

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

因此,与其尝试过滤掉重复事件,不如将它们全部添加到数组中,然后array_count_values()最后使用来了解它们的发生。

于 2013-07-22T02:23:08.053 回答