0

私は配列 $history を持っています:

Array (
Array ([id] => 1, [created] => 2012-12-20 22:40, [message] => 'Message1 to display here'),
Array ([id] => 2, [created] => 2012-12-20 22:40, [message] => 'Message2 to display here'),
Array ([id] => 3, [created] => 2012-12-20 22:40, [message] => 'Message3 to display here'),
Array ([id] => 4, [created] => 2012-12-20 21:30, [message] => 'Message4 to display here'),
Array ([id] => 5, [created] => 2012-12-20 21:30, [message] => 'Message5 to display here'),
Array ([id] => 6, [created] => 2012-12-20 20:20, [message] => 'Message6 to display here'),
);

日付 [作成] フィールドでグループ化されたメッセージ [メッセージ] を表示したいと思います。

お気に入り

2012-12-20 22:40
======================
Message1
Message2
Message3

2012-12-20 21:30
======================
Message4
Message5

役立つ関数 array_count_values() があることは知っています。

4

3 に答える 3

2
$arr_by_dates = array();
foreach($arr as $a){
    if (!isset($arr_by_dates[$a['created']])){
        $arr_by_dates[$a['created']] = array();
    }
    $arr_by_dates[$a['created']][] = $a['message'];
}

各レコードに追加情報を保存する場合は、メッセージ自体の代わりに配列を使用できます。

$arr_by_dates = array();
foreach($arr as $a){
    if (!isset($arr_by_dates[$a['created']])){
        $arr_by_dates[$a['created']] = array();
    }
    $arr_by_dates[$a['created']][] = $a;
    // or  = array('message'=>$a['message'], 'id'=>$a['id']);
}
于 2012-12-21T14:25:23.927 に答える
1

お役に立てれば:

$keys = array();
foreach ($arr as $item) 
{
    $keys[] = strtotime($item['created']);
}
sort($keys);
array_multisort($arr, $keys);
于 2012-12-21T14:27:30.967 に答える
0

構造を変換してから、ステップスルーして印刷することができます

$grouped = array();
foreach( $histories as $row ) {
  $date = $row['created'];
  if ( isset($grouped[$date]) ) {
    $grouped[$date][] = $row;
  }
  else {
    $grouped[$date] = array($row);
  }
}

または、印刷しながら印刷することもできます。後者は、created日付順に並べられた結果によって異なります。

$last = $html = '';
foreach( $histories as $row ) {
  $date = $row['created'];
  if ( $last != $date ) {
    if ( $last ) $html .= '</div>';
    $html .= '<div>';
    $html .= '<h3>'.$date.'</h3>';
    $last = $date;
  }
  $html .= '<p>'.$row['message'].'</p>';
}
$html .= ($html?'</div>':'');
于 2012-12-21T14:28:56.163 に答える