将缺少的日期添加到数组中

use*_*844 2 php

我有以下数组:

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)

dna*_*irl 8

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)

  • @SHutch:非常难过.我建议馅饼(或蛋糕).如果你的系统管理员不容易受到贿赂,那么你可以自己吃.不管怎样,你感觉好多了. (2认同)

Ant*_*nna 5

我一直在等待机会尝试PHP 5.3中的DateTimeDateInterval对象,您的问题是做到这一点的绝好机会。请注意,此代码不适用于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)