1

私は次のように見えるのを持っていますarrayobjectsphp

Array
(
    [0] => Array
      (
        [day] => 1/23/2013
        [executions] => 1
      )

    [1] => Array
      (
        [day] => 1/24/2013
        [executions] => 1
      )

    [2] => Array
      (
        [day] => 1/27/2013
        [executions] => 10
      )

    [3] => Array
      (
        [day] => 1/29/2013
        [executions] => 1
      )

    [4] => Array
      (
        [day] => 1/30/2013
        [executions] => 3
      )

    [5] => Array
      (
        [day] => 2/8/2013
        [executions] => 1
      )

   [6] => Array
      (
        [day] => 2/11/2013
        [executions] => 3
      )

)

私はこのデータのグラフを作成しています。基本的には過去30日間を表しています。問題は、欠落している日が取得されないことです。つまり、クエリからの実行がなかった場合です。私はこれらの欠落している日をPHPで埋め、単純dayに正しい日付に設定し、をに設定することを検討しexecutionsています01/18/2013したがって、開始が今日で終了が今日であると仮定すると、結果の配列には30個の要素が含まれている必要があります2/17/2013

PHPでこれを達成するための最良のアルゴリズムのアイデアはありますか?

4

3 に答える 3

5

何かのようなもの:

$start = '1/18/2013';
$end = '2/17/2013';

$range = new DatePeriod(
  DateTime::createFromFormat('m/d/Y', $start),
  new DateInterval('P1D'),
  DateTime::createFromFormat('m/d/Y', $end));

$filler = array();

foreach($range as $date)
  $filler[] = array(
    'day'      => $date->format('m/d/Y'),
    'execution' => 0,
  };

$array += $filler;
于 2013-02-17T18:53:54.600 に答える
2

DateTime を使用して各日付をループします。

$start = new DateTime('2013-01-18');
$end = new DateTime('2013-02-17');
while ($start <= $end)
{
    $current_date = $start->format('m/d/Y');
    // Right here look in your array and see if that date exists
    // and do whatever you need to do if it does/does not
    $start->modify("+1 day");
}
于 2013-02-17T18:49:15.517 に答える
1

これを使用できます:

$startDate = new DateTime ( "-30 days" );
$dateItter = new DatePeriod ( 
    $startDate,
    new DateInterval ('P1D'),
    30  
);

$original = array (
    array ( 
        'days' => '02/16/2013',
        'executions' => 5
    )   
);

$result = array (); 

foreach ( $dateItter as $date )
{
    $executions = 0;

    foreach ( $original as $item ) { 
        if ( $item['days'] == $date->format ( 'm/d/Y' ) ) 
            $executions = $item['executions'];
    }   

    $result[] = array (
        "day" => $date->format ( 'm/d/Y' ),
        "executions" => $executions
    );  
}

var_dump ( $result );

大量のデータでは遅いですが、30 アイテムの場合は問題ありません。

于 2013-02-17T19:20:32.180 に答える