- ベストアンサー
配列の日付ソート方法とは?
- PHPで配列の日付ソート処理を行いたい場合、バブルソートなどの作成が必要です。
- 配列の日付ソート処理で最初の配列の添え字を取得する方法はありますか?
- 今回の質問ではksortを使用して日付ソートしましたが、うまく昇順されませんでした。他の方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ようは日付の降順にソートしたいんですよね? ちょっとは自分でも考えましょう。 下記比較関数の ($p1[1]-$p2[1]) ココを適当に数字に直して比較してみてください。 簡単な例を挙げれば、もし日付だけでいいなら explode("\s",$p1[1])-explode("\s",$p2[1]) みたいに。 時間まで比較したいときは、面倒なので自分で考えてください(笑)
その他の回答 (3)
- kusukusu
- ベストアンサー率38% (141/363)
$array[0]="2004-11-01 14:20:10.412761+09"; $array[1]="2004-11-28 19:09:42.898169+09"; $array[2]="2004-11-26 17:16:10.531744+09"; $array[3]="2004-11-30 20:25:39.622259+09"; function sort_by_day($p1,$p2) { return($p1[1]-$p2[1]); } usort($array,"sort_by_day"); print_r($array);
- kusukusu
- ベストアンサー率38% (141/363)
function sort_by_day($p1,$p2) { return($p1[1]-$p2[1]); } usort($array,"sort_by_day"); 上記のような関数を作って usortすればうまくいくと思いますよ。
補足
教えていただいた方法でやってみたのですが、 どのような結果になるのが正しいのでしょうか? 下記のようなエコー文を追加したときに 日付の順番も添え字も0から始まってしまいました。 while (list ($key, $value) = each ($up_date)) { echo "$key: $value\n"; }
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>最初の配列の添え字 例からすると、0じゃないの? >"cmp" 2番目の引数は、ソートフラグです。 参考URLをご覧下さい。 比較関数を利用するのは、 usortまたはuksortです 多分、 rsort($array)の後に reset($array)が必要という意味だと思います。
- 参考URL:
- http://jp2.php.net/manual/ja/function.sort.php,http://jp2.php.net/manual/ja/function.uksort.php
補足
$array[0]=2004-11-01 14:20:10.412761+09; $array[1]=2004-11-28 19:09:42.898169+09; $array[2]=2004-11-26 17:16:10.531744+09; $array[3]=2004-11-30 20:25:39.622259+09; 最初は上記のような配列になっていると思うのですが、 rsortで並び変えた後は $array[3]=2004-11-30 20:25:39.622259+09; $array[1]=2004-11-28 19:09:42.898169+09; $array[2]=2004-11-26 17:16:10.531744+09; $array[0]=2004-11-01 14:20:10.412761+09; になっていると思います。ただ、rsortで並びかえると $array[0]=2004-11-30 20:25:39.622259+09; $array[1]=2004-11-28 19:09:42.898169+09; $array[2]=2004-11-26 17:16:10.531744+09; $array[3]=2004-11-01 14:20:10.412761+09; となってしまいます。最初の並びかえる前の配列の添え字を取得したいのです。 $array[3] $array[1] $array[2] $array[0]
お礼
すみません。降順にソートするのは単純にrsortでやるとできました。 上記の関数を作って考えてみたいと思います。 長々とありがとうございます。