我正在尝试创建一个函数来抓取在某个用户的数据库中有事件的所有日子。例如,如果在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']。
如果您需要更多信息,请告诉我......
谢谢! :)
答案 0 :(得分: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;
}
答案 1 :(得分:0)
功能:array_count_values()可以帮助您解决此问题,它提供了数组中值的总发生次数。
例如:
$a = array("apple", "banana", "apple");
var_dump(array_count_values($a));
将输出
array(
[apple] => 2,
[banana] => 1
);
所以而不是尝试过滤掉重复的事件,将它们全部添加到数组,然后最后使用array_count_values()
来了解它们的出现。