2016-03-31 11 views
0

多次元配列を日付ASCでソートしようとしていますが、私は問題を抱えています...あなたと女の子にどうしてこのようなことが起こるのか質問したいですか?多次元配列を値でソートしないで値を並べ替える

私のコードです(で実行:Codepad example):

$data = array (
      array (
      'date' => '2016-03-11 12:10:17', 
      'type' => '1' 
     ), 
      array (
      'date' => '2016-03-12 07:16:25', 
      'type' => '1' 
     ), 
      array (
      'date' => '2016-03-12 07:18:07', 
      'type' => '2' 
     ), 
      array (
      'date' => '2016-03-09 14:57:42', 
      'type' => '2' 
     ), 
      array (
      'date' => '2016-02-22 10:39:39', 
      'type' => '1' 
     ) 
    ); 
    usort($data, function($a, $b) { 
     return $a['date'] - $b['date']; 
    }); 
    echo '<pre>'; 
    var_dump($data); 

問題はソートが良くないということで、私は「それは2月から3月である必要があり、これをやっていないと私はできることを意味なぜ見つからないの?

ご協力いただきありがとうございます。

+0

正確には機能しないものはありますか?何か間違いはありますか?何を修正しようとしましたか?このページの指示に従って、高品質の質問を作成してください:http://stackoverflow.com/help/how-to-ask –

答えて

1

使用されるドキュメントからソート:あなたが予期しない結果を持っているので、http://php.net/manual/en/function.usort.php

usort($data, function($a, $b) { 
    if ($a['date'] == $b['date']) { 
     return 0; 
    } 
    return ($a['date'] < $b['date']) ? -1 : 1; 
}); 
1

あなたは、文字列ではなく、数を比較します。 2つの文字列を比較するため

、あなたはstrcmp使用することができます:最初の引数が2番目の値より小さい場合は

usort($data, function($a, $b) { 
    return strcmp($a['date'], $b['date']); 
}); 

strcmp戻り< 0;最初のargが2番目のargより大きい場合は0より大きく、等しい場合は0です。

関連する問題