何かのイベントの開始日、終了日、内容メモをカテゴリごとに分けて保持した連想配列を、カテゴリ区分はそのままに、開始日が早い順にソートしたい場合、
以下のように、UASORT関数を使うのが最も簡単で見やすいと考えていますが、下記のような手法で間違いが無いか念のため確認したく、質問を投稿させて頂きました。
★データサンプル
カテゴリで分けられた配列データ群があり、その中には更に複数の配列が格納されています。最小単位のセットには、イベント開始日・イベント終了日・メモが入っています。
$source['category_01']['date_01'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_01']['date_02'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_01']['date_03'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_02']['date_04'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_02']['date_05'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_02']['date_06'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_07']['date_07'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_07']['date_08'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX'); $source['category_08']['date_09'] = array('start_date'=>'2018-10-10','end_date'=>'2018-10-15','value'=>'XXXX');
★開始日でソートする方法
カテゴリ区分はそのままにしたいので、「同じカテゴリの配列データ群」を一つの配列として、これに対してUASORT関数を使いました。
日付が「日時」に変わっても対応できるよう、ここでは、STRTOTIMEで比較してあります。
開始日が早い順にしたいので、比較対象AのタイムスタンプがBよりも小さい時には-1を返すようにしました。
foreach ($source as $key => $value_array){ uasort( $source[$key], function( $a, $b ){ if(strtotime($a['start_date']) === strtotime($b['start_date'])){ return 0; }else if(strtotime($a['start_date']) < strtotime($b['start_date'])){ return -1; }else{ return 1; } } ); }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/10 03:15