2011-12-28 10 views
3

これはイベントを表示するためにGoogleカレンダーから取得した多次元配列です。多次元配列の値によるソート

Array 
(
[items] => Array 
    (
     [0] => Array 
      (
       [status] => confirmed 
       [summary] => Let's go swimming! 
       [start] => Array 
        (
         [dateTime] => 2011-12-30T09:00:00-05:00 
        ) 

       [end] => Array 
        (
         [dateTime] => 2011-12-30T10:00:00-05:00 
        ) 

      ) 

     [1] => Array 
      (
       [status] => confirmed 
       [summary] => red wine 
       [start] => Array 
        (
         [dateTime] => 2011-12-28T06:00:00-05:00 
        ) 

       [end] => Array 
        (
         [dateTime] => 2011-12-28T07:00:00-05:00 
        ) 

      ) 

     [2] => Array 
      (
       [status] => confirmed 
       [summary] => Christmas 
       [start] => Array 
        (
         [dateTime] => 2011-12-28T09:30:00-05:00 
        ) 

       [end] => Array 
        (
         [dateTime] => 2011-12-28T10:30:00-05:00 
        ) 

      ) 
    ) 
) 

私はPHP [endetime]でソートする必要があります。誰かが私に助けを与えることができれば、本当に感謝します。私はそれをする方法が不思議だった。

+1

重複http://stackoverflow.com/questions/2699086/php-sort-multidimensional-array-byvalue? – liquorvicar

答えて

9
usort($array['items'], function($a, $b){ 
    if ($a['end']['dateTime'] === $b['end']['dateTime']) return 0; 
    else return ($a['end']['dateTime'] > $b['end']['dateTime']) ? -1 : 1; 
}); 

usort();

この特定のケースでは、日付を文字列として比較し、形式のために正解を得ることができます。他の場合には、UNIXのタイムスタンプに変換してそれらを比較するなど、他の方法が必要な場合があります。

+0

+1の良い答えです。 –

+0

なぜT_functionエラーが発生しますか? –

+0

私はPHP 5.3+を必要とする無名関数を使用しました。比較関数を指定する他の方法については、マニュアルの例を参照してください。 – goat

0

AFAIKこれには直接的な方法はありません。私は通常、次のようなことをします

$items=array(); 
foreach($mainarray['items'] as $k=>$v) $items[$v['end']['$dateTime'."-$k"]]=$v; 
ksort($items); 
$mainarray['items']=array_values($items);