我有以下数组:
Array ( [2010-10-30] => 1 [2010-11-11] => 1 [2010-11-13] => 11 )
Run Code Online (Sandbox Code Playgroud)
我试图用第一个和最后一个元素之间的所有缺少日期填充数组.我试图使用以下但无处可去:
foreach($users_by_date as $key => $value){
$real_next_day = date($key, time()+86400);
$array_next_day = key(next($users_by_date));
if($real_next_day != $array_next_day){
$users_by_date[$real_next_day] = $value;
}
}
Run Code Online (Sandbox Code Playgroud)
DateTime,DateInterval和DatePeriod类可以在这里提供帮助.
$begin=date_create('2010-10-30');
$end=date_create('2010-11-13');
$i = new DateInterval('P1D');
$period=new DatePeriod($begin,$i,$end);
foreach ($period as $d){
$day=$d->format('Y-m-d');
$usercount= isset($users_by_date[$day]) ? $users_by_date[$day] :0;
echo "$day $usercount";
}
Run Code Online (Sandbox Code Playgroud)
我一直在等待机会尝试PHP 5.3中的DateTime和DateInterval对象,您的问题是做到这一点的绝好机会。请注意,此代码不适用于5.3之前的PHP版本
<?php
$dates = array('2010-10-30' => 1, '2010-11-01' => 1, '2010-11-13' => 1);
// get start and end out of array
reset($dates);
$start = new DateTime(key($dates));
end($dates);
$end = new DateTime(key($dates));
foreach (new DatePeriod($start, new DateInterval('P1D'), $end) as $date) {
$dateKey = $date->format('Y-m-d'); // get properly formatted date out of DateTime object
if (!isset($dates[$dateKey])) {
$dates[$dateKey] = 1;
}
}
print_r($dates);
Run Code Online (Sandbox Code Playgroud)