• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列の日付ソート処理2)

配列の日付ソート方法とは?

このQ&Aのポイント
  • PHPで配列の日付ソート処理を行いたい場合、バブルソートなどの作成が必要です。
  • 配列の日付ソート処理で最初の配列の添え字を取得する方法はありますか?
  • 今回の質問ではksortを使用して日付ソートしましたが、うまく昇順されませんでした。他の方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.4

ようは日付の降順にソートしたいんですよね? ちょっとは自分でも考えましょう。 下記比較関数の ($p1[1]-$p2[1]) ココを適当に数字に直して比較してみてください。 簡単な例を挙げれば、もし日付だけでいいなら explode("\s",$p1[1])-explode("\s",$p2[1]) みたいに。 時間まで比較したいときは、面倒なので自分で考えてください(笑)

aiurai54
質問者

お礼

すみません。降順にソートするのは単純にrsortでやるとできました。 上記の関数を作って考えてみたいと思います。 長々とありがとうございます。

その他の回答 (3)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

$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)
回答No.2

function sort_by_day($p1,$p2) { return($p1[1]-$p2[1]); } usort($array,"sort_by_day"); 上記のような関数を作って usortすればうまくいくと思いますよ。

aiurai54
質問者

補足

教えていただいた方法でやってみたのですが、 どのような結果になるのが正しいのでしょうか? 下記のようなエコー文を追加したときに 日付の順番も添え字も0から始まってしまいました。 while (list ($key, $value) = each ($up_date)) { echo "$key: $value\n"; }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>最初の配列の添え字 例からすると、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
aiurai54
質問者

補足

$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]