2011-08-09 7 views
1

私は現在、このコードを持っている:表示PHPの配列は、特定の形式の文字列としてタイムスタンプ

$dates = array(); 
foreach($data['sc_event_dates'] as $date) { 
    if($date > time()) { 
     $dates[] = date(empty($dates) ? "D d M": "d M", $date); 
    } 
} 
echo implode(", ", $dates); 

をそして、それはこのようなものが表示さ:

Thu 11 Aug, 18 Aug, 25 Aug, 01 Sep, 08 Sep, 15 Sep 

をしかし、私はグループ何をする必要がありますか各月の日付出力は次のようになりますので:

Thu 11, 18, 25 Aug, 01, 08, 15 Sep 

$data['sc_event_dates']はの配列を保持UNIXのタイムスタンプであり、注文はascendingです。

現在の時刻より前の日付も無視する必要があります。ここで

は、いくつかの例のデータである:

Array 
(
    [0] => 1313020800 
    [1] => 1313625600 
    [2] => 1314230400 
    [3] => 1314835200 
    [4] => 1315440000 
    [5] => 1316044800 
) 

いずれかが私のコードを変更する助け、または新しいコードを生成し、自分の所望の出力を得るためにすることはできますか?

答えて

1
$dates = array(); 
foreach($data['sc_event_dates'] as $key => $date) { 
    if($date > time()) { 

     $next = ++$key; 
     $format = 'd'; 

     if(empty($dates)) { 

      $format = 'D '.$format; 
     } 

     if(!isset($data['sc_event_dates'][$next]) || date('n', $date) != date('n', $data['sc_event_dates'][$next])) { 

      $format .= ' M'; 
     } 

     $dates[] = date($format, $date); 
    } 
} 
echo implode(", ", $dates); 
0

あなたは、どの月が表示されているかを把握し、必要に応じて出力を調整する簡単なステートマシンを使用します。

$prev_month = null; 
foreach(... as $date) { 
    if ($date < time()) { 
     continue; 
    } 
    $day = date('D', $date); 
    $day_num = date('d', $date); 
    $month = date('M'); 
    if ($prev_month != $month) { 
     echo $month, ' '; 
     $prev_month = $month; 
     $sep = ''; 
    } 
    echo $day_num, $sep; 
    $sep = ', '; 
} 

テストされていない、YMMV、等...

関連する問題