2009-03-24 20 views
0

ここでは非常に具体的な問題があります。私は最初に30分の時間間隔、2番目の日付でソートしたい多次元配列を持っています。関数array_multisortは私の要求を満たしません。PHP:30分間隔で並べ替え

例:私がしたい:私は私自身のソートのコールバック関数と組み合わせてuksortでこれを実現しようとした

array(array("time"=>"11:30", 
      "date"=>"2009-03-24"), 
     array("time"=>"12:10", 
      "date"=>"2009-03-23"), 
     array("time"=>"12:00", 
      "date"=>"2009-03-24"), 
     array("time"=>"12:15", 
      "date"=>"2009-03-24")); 

array(array("time"=>"12:15", 
      "date"=>"2009-03-24"), 
     array("time"=>"12:10", 
      "date"=>"2009-03-23"), 
     array("time"=>"12:00", 
      "date"=>"2009-03-24"), 
     array("time"=>"11:30", 
      "date"=>"2009-03-24")); 

はと終わるために。

uksort($myArray, "sortThirties"); 

function sortThirties($a, $b) 
{ 
    //Get the two times as timestamps relative to today 
    $one = strtotime($a['time']); 
    $two = strtotime($b['time']); 

    //Round them down to the nearest half-hour time 
    $one = $one - ($one % 1800); 
    $two = $two - ($two % 1800); 

    //Return the difference if times are unequal 
    //If times are equal, return the difference between dates. 
    return ($one == $two ? strcmp($a['date'],$b['date']) : $one - $two); 
} 

をすぐにこの機能を実行した後、私は)(ますprint_rで配列をプリントアウト、およびデータの順序はランダムに表示されます。これは私が現在使用しているコードです。私は何が欠けていますか?

EDIT: それは結局のところ、順序完全ランダムです。

echo "<BR>",$a['time']," ",$b['time']; 

と私が得たすべては<BR>年代の50ページだった:私はsortThirties機能に次の行を追加しました。

私は非常に同じアレイ上で実行このコードは私にソートされていないデータを与えるので、アレイが正しく構成されている知っている:

foreach($myArray AS $a) 
{ 
    echo "<BR>",$a['date']," ",$a['time']; 
} 

私は考えることができる唯一のことは、uksortに問題があることが必要です。何かご意見は?

答えて

2

があるPHPのバージョンに変更されたことに気づきました例:

$to_sort = array( 
        0 => array("time"=>"12:15", "date"=>"2009-03-24"), 
        1 => array("time"=>"12:10", "date"=>"2009-03-23"), 
        2 => array("time"=>"12:00", "date"=>"2009-03-24"), 
        3 => array("time"=>"11:30", "date"=>"2009-03-24") 
       ); 

違いがわかりますか? :)

+0

Yeesh ...インターネット上のみんなに、なぜ私はばかだと尋ねたのですか?親切でありがとう。私はなぜ昨日それを理解できなかったのか分かりません。何らかの理由で、私はphpドキュメントの例を見て、キー( "地球"、 "リンゴ"など)を値として見ました。 –

+0

心配する必要はありません。時にはそのようなものを見逃してしまいます。これは、このようなサイトが便利なときです。私が助けることができてうれしいです:)。 – Adi

2

非常に奇妙です。私はちょうどあなたが提供したものに似た配列であなたのコードを試しました、そして、それは素晴らしい仕事をしました。可能性:

  • 配列の時刻/日付のいずれかに余白がありますか?
  • PHPのバージョンに違いはありますか?私はのstrtotime()の戻り値は usort種類の値で配列し、あなたの配列をソートする一方で uksort関数はキーで配列をソート5.1.0
+0

PHPのバージョンによっては、時間をstrtotimeで渡す必要があります。これは彼の問題かもしれない。 – gradbot

+0

ソートコードが実行されているのと同じシステムでこれをテストしました。 strtotime( "15:30")は、今日の午後3時30分にunixタイムスタンプを返します。 –