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

配列のソートについての質問

このQ&Aのポイント
  • 初心者の方から、配列のソートに関する質問です。具体的には、テキストファイルから読み込んだ配列をソートする方法について教えてください。
  • 質問者はテキストファイルから読み込んだ配列をソートしたいと考えています。ソート後の配列の要素を出力する際、特定の条件でソートを行いたいとしています。
  • 具体的には、配列の要素が同じ場合にさらに別の条件(日時)でソートする方法を知りたいとしています。この条件を満たすソートの方法についてアドバイスを求めています。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なるほど先頭要素で降順に、4番目の要素で昇順にソートしたいのですね? usortで処理してみてはどうでしょうか? <?PHP $line=Array( "100,問題番号→,1239,2010/06/22/Tue/11/41/24 4c1" ,"50,問題番号→,1238,2010/06/22/Tue/11/50/31 4c21" ,"20,問題番号→,1237,2010/06/22/Tue/11/44/15 4c10" ,"100,問題番号→,1239,2010/06/21/Tue/11/42/48 4c30" ,"100,問題番号→,1239,2010/06/22/Tue/11/42/48 4c28" ,"50,問題番号→,1238,2010/06/22/Tue/11/52/33 4c23" ,"100,問題番号→,1239,2010/06/22/Tue/11/40/54 4c26" ,"20,問題番号→,1237,2010/06/22/Tue/11/42/15 4c20" ); usort($line,"cmp"); foreach ($line as $tmp){ print "$tmp<br>"; } function cmp($a, $b){ $aa=explode(",",$a); $bb=explode(",",$b); if($aa[0] < $bb[0]) return 1; if($aa[0] > $bb[0]) return -1; if($aa[3] < $bb[3]) return -1; if($aa[3] > $bb[3]) return 1; return 0; } ?>

参考URL:
http://www.php.net/manual/ja/function.usort.php
ttaa100kkaa
質問者

お礼

ありがとうございました。助かりました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

早い順のソートとは? またもともとrsortで「SORT_NUMERIC」でソートをしている意味はあるのですか? 単純に前方から比較してソートを昇順におこなうなら sortでSORT_STRINGで行ってみてはどうでしょう? <? $line=Array( "22,問題番号→,1239,2010/06/22/Tue/11/41/24 4c1" ,"22,問題番号→,1239,2010/06/22/Tue/11/40/54 4c26" ,"22,問題番号→,1239,2010/06/22/Tue/11/42/48 4c28" ,"22,問題番号→,1239,2010/06/22/Tue/11/52/33 4c23" ,"22,問題番号→,1239,2010/06/22/Tue/11/42/15 4c20" ); rsort($line,SORT_STRING); foreach ($line as $tmp){ print "$tmp<br>"; } ?>

ttaa100kkaa
質問者

お礼

ありがとうございました。

ttaa100kkaa
質問者

補足

ありがとうございました。 書き方が不十分で、すみません。 先頭の数字で ユーザー 4c1,4c26,4c28,4c23,4c20 の順位をつけようとしています。 22,問題番号→,1239,2010/06/22/Tue/11/41/24 4c1 22,問題番号→,1239,2010/06/22/Tue/11/40/54 4c26 22,問題番号→,1239,2010/06/22/Tue/11/42/48 4c28 21,問題番号→,1238,2010/06/22/Tue/11/52/33 4c23 20,問題番号→,1237,2010/06/22/Tue/11/42/15 4c20 となってしまうので、 22,問題番号→,1239,2010/06/22/Tue/11/41/24 4c1 22,問題番号→,1239,2010/06/22/Tue/11/40/54 4c26 22,問題番号→,1239,2010/06/22/Tue/11/42/48 4c28 を 22,問題番号→,1239,2010/06/22/Tue/11/40/54 4c26 22,問題番号→,1239,2010/06/22/Tue/11/41/24 4c1 22,問題番号→,1239,2010/06/22/Tue/11/42/48 4c28 となるようにするには、 どうしたらよいでしょうか? 同じ 22 なら、解答した時間順にソートしたいのです。 よろしくお願いします。

関連するQ&A