2

次の配列があります。

Array
(
    [0] => Array
    (
        [date] => 2012-01-10        
    )
    [1] => Array
    (
        [date] => 2012-01-11
    )
    [2] => Array
    (
        [date] => 2012-01-12
    )
    [3] => Array
    (
        [date] => 2012-01-15
    )
    [4] => Array
    (
        [date] => 2012-01-18
    )
    [5] => Array
    (
        [date] => 2012-01-19
    )
)

そして、彼の範囲で日付を組み合わせたいと思います。最後に、次のようなものが必要です

Array
(
    [0] => Array
    (
        [from] => 2012-01-10
        [till] => 2012-01-12
    )
    [1] => Array
    (
        [from] => 2012-01-15
        [till] => 2012-01-15
    )
    [2] => Array
    (
        [from] => 2012-01-18
        [till] => 2012-01-19
    )
)

しかし、それはまた広い範囲をサポートする必要があります。2012-01-22 から 2012-05-14 のようなものです。誰でもアイデアやヒントはありますか?

4

1 に答える 1

0

出力には、上記の例の入力と同じ日付が含まれていません。開始日/終了日はどのように決定されますか? 単純に配列を調べて、to を交互に実行するだけですか?

function from_till($dates = array()){
  $sorted = array();
  for($i=0; $i<count($dates)-2; $i+=2){
    $sorted[] = array('from' => $dates[$i], 'till' => $dates[$i+1];
  }
  return $sorted;
}

入力:

$input = Array
(
    [0] => Array
    (
        [date] => 2012-01-10        
    )
    [1] => Array
    (
        [date] => 2012-01-11
    )
    [2] => Array
    (
        [date] => 2012-01-12
    )
    [3] => Array
    (
        [date] => 2012-01-15
    )
    [4] => Array
    (
        [date] => 2012-01-18
    )
    [5] => Array
    (
        [date] => 2012-01-19
    )
);

出力:

  $output = from_till($input);
  print_r($output);

print_r の出力

Array
(
    [0] => Array
    (
        [from] => 2012-01-10
        [till] => 2012-01-11
    )
    [1] => Array
    (
        [from] => 2012-01-12
        [till] => 2012-01-15
    )
    [2] => Array
    (
        [from] => 2012-01-18
        [till] => 2012-01-19
    )
);
于 2014-06-07T20:29:26.903 に答える