2011-01-01 10 views
1

私はイベントの配列を持っています...各イベントは "時間"と呼ばれるキーを持っています。 「時間」キーには、「午前8時」または「午後6時」などの文字列が格納されます。PHPでは相対時間(タイムスタンプではない)に基づいて配列を配列しますか?

このタイムキーに基づいてこの配列を注文する必要があります。これはどのように可能でしょうか?

答えて

0

strtotime()は、8:00 AMのようなものを解析できます。それはあなたの友人です。

function cmp_func($a, $b) { 
    $atime = strtotime($a['time']); 
    $btime = strtotime($b['time']); 
    if($atime == $btime) return 0; 
    return ($atime < $btime) ? -1 : 1; 
} 

usort($your_array, 'cmp_func'); 

あなたがこの方法でソートしている配列(単数または複数)が非常に大きい場合、呼の数を減らすために、事前にアレイの一部としてstrtotime()から値を格納するためにそれの価値があることに注意してください全体的にそれに。

+0

わかりましたが...しかし、どのように私は、インデックス「時間」に基づいて多次元配列をソートしますか?複数のイベントが同じ開始時刻を持つ可能性があるため、「時間」は一意ではありません。 –

+0

追加コードを参照してください。 – Amber

+0

うーん...ありがとう、もう1つ質問...私はこれをクラスベースのシステムで使っているので... public function cmp_func($ a、$ b)...私はどのようにしてusortを使うのだろうか? $ this-> cmp_funcの一部としてcmp_funcを呼び出しますか? –

0

php.netソート機能、コメントオフ1

$array[0]['name'] = 'Chris'; 
$array[0]['phone'] = '3971095'; 
$array[0]['year'] = '1978'; 
$array[0]['address'] = 'Street 1'; 

$array[1]['name'] = 'Breanne'; 
$array[1]['phone'] = '3766350'; 
$array[1]['year'] = '1990'; 
$array[1]['address'] = 'Street 2'; 

$array[2]['name'] = 'Dusty'; 
$array[2]['phone'] = '1541120'; 
$array[2]['year'] = '1982'; 
$array[2]['address'] = 'Street 3'; 

function multisort($array, $sort_by, $key1, $key2=NULL, $key3=NULL, $key4=NULL, $key5=NULL, $key6=NULL){ 
    // sort by ? 
    foreach ($array as $pos => $val) 
     $tmp_array[$pos] = $val[$sort_by]; 
    asort($tmp_array); 

    // display however you want 
    foreach ($tmp_array as $pos => $val){ 
     $return_array[$pos][$sort_by] = $array[$pos][$sort_by]; 
     $return_array[$pos][$key1] = $array[$pos][$key1]; 
     if (isset($key2)){ 
      $return_array[$pos][$key2] = $array[$pos][$key2]; 
      } 
     if (isset($key3)){ 
      $return_array[$pos][$key3] = $array[$pos][$key3]; 
      } 
     if (isset($key4)){ 
      $return_array[$pos][$key4] = $array[$pos][$key4]; 
      } 
     if (isset($key5)){ 
      $return_array[$pos][$key5] = $array[$pos][$key5]; 
      } 
     if (isset($key6)){ 
      $return_array[$pos][$key6] = $array[$pos][$key6]; 
      } 
     } 
    return $return_array; 
    } 

//usage (only enter the keys you want sorted): 

$sorted = multisort($array,'year','name','phone','address'); 
print_r($sorted); 

//output: 
Array ([0] => Array ([year] => 1978 [name] => Chris [phone] => 3971095 [address] => Street 1) [2] => Array ([year] => 1982 [name] => Dusty [phone] => 1541120 [address] => Street 3) [1] => Array ([year] => 1990 [name] => Breanne [phone] => 3766350 [address] => Street 2)) 
関連する問題