2016-07-29 11 views
1

私はゲーム時間のリストを持っていますので、1:05 PM、2:05 PM、午後7:10 PM、午後10:15など多次元配列とstrcmpを使用してusortでこれらのゲームを並べ替える最初から最後までの正しい順序。PHPの間違った結果

ゲームはソートされていますが、10PMで始まるゲームは他のゲームの前にリストされています。今日のためにこれをトラブルシューティングしてIHAVE

Dodgers 7/29/16 10:05 PM 
Angels 7/29/16 10:10 PM 
A's 7/29/16 10:15 PM 
Cubs 7/29/16 2:20 PM 
Jays 7/29/16 7:05PM 
Rays 7/29/16 7:15PM 
Astros 7/29/16 8:05 PM 

など

:だから、私の現在のソートは次のようになります。私はstrtotime()を使用して私の日付の文字列を変換しようとしましたが、usortはこれを全く気に入らず、私の並べ替えはランダムになります。私はスラッシュの代わりにハイフンを使用して日付/時刻をフォーマットしようとしましたが、何も変わりません。私は、余分な文字のための私の日付/時間の文字列も 'スクラブ'しています。ここに私のコードです:

答えて

2

Usortは、ユーザー定義の比較機能を定義したいと考えています。あなたはそれを必要としません。 strtotime()にclasic sortを使用します。

また、ksortを使用することもできます。ここで動作するコードです:

$game_times = array(array("Dodgers", "7/29/16 10:05 PM"), 
        array("Angels", "7/29/16 10:10 PM"), 
        array("A's", "7/29/16 10:15 PM"), 
        array("Cubs", "7/29/16 2:20 PM"), 
        array("Jays", "7/29/16 7:05PM"), 
        array("Rays", "7/29/16 7:15PM"), 
        array("Astros", "7/29/16 8:05 PM")); 

foreach ($game_times as $item) 
{ 
    $games[strtotime($item[1])] = array('date' => $item[1], 
             'title' => $item[0]); 
} 

ksort($games); 

var_dump($games); 
+0

私はソート()を使用しようとしましたが、それがエラーを投げたが、それはusortが間違ってソート方法だったことを考えて私を得ました。だから私はksort(多次元配列のキーで並べ替える)がそのトリックをやることを理解しました。私の焦点を切り替えてくれてありがとう。 – xar86413

+0

ksortの良いアイデア。私は私の答えでそれを少し精緻化した。 –

0
// Multidimensional array of 'games'                                         
    $games[] = array('date' => $timedate,        
        'title' => $string);         

    // Sort the array 
    ksort($games);