2016-10-29 9 views
0

私の配列は以下の通りである。ソート配列は

Array ([01:00 pm] => Lunch [03:00 pm] => Dance [12:45 pm] => Guests arrive [12:50 pm] => Find seats [12:55 pm] => Blessing) 

は私が正しい順序は次のようになりますようにソート用にカスタマイズされた時間形式にこれらのキーを変換する必要があります。

Array ([12:45 pm] => Guests arrive [12:50 pm] => Find seats [12:55 pm] => Blessing [01:00 pm] => Lunch [03:00 pm] => Dance) 

しかし、それだけではありません。これらの当事者は、しばしば朝の午前1時または午前2時に終了します。したがって、3amを最初の値にしてクロックを開始すると意味があります。このように、02:00午前のエントリはソートされたリストの最後に表示され、午前5時00分のエントリが最初の午後に表示されます(03:00 amを時計の冒頭に指定するため)

私は配列で2時00分午前5時00分午前の例を持っていた場合、それはのように読みます:

Array ([05:00 am] => Wake up [12:45 pm] => Guests arrive [12:50 pm] => Find seats [12:55 pm] => Blessing [01:00 pm] => Lunch [03:00 pm] => Dance [02:00 am] => Party ends) 

はどこか、どのように配列からキーを変換するために、私は知らない私は現在。持っている:

+0

を - >ソート - >変換 –

答えて

1

これは、array_multisortを使用して、タイムストリングをnumbeにマッピングする1つの方法です午前0時からの秒のR、そして最後に最初の3時間の移動:トランスフォーム

$event_order = Array ( 
    "12:45 pm" => "Guests arrive", 
    "12:55 pm" => "Blessing", 
    "02:00 am" => "Party ends", 
    "05:00 am" => "Wake up", 
    "01:00 pm" => "Lunch", 
    "03:00 pm" => "Dance", 
    "12:50 pm" => "Find seats"); 

array_multisort(array_map(function ($v) { 
    return (strtotime($v) - strtotime("midnight") + 21*3600) % (24*3600); 
}, array_keys($event_order)), $event_order); 

print_r($event_order); 
+0

私のために魔法のように働いています。あなたのコードから試してみます。ありがとうございました! – osakagreg