- ベストアンサー
配列のソートについての質問
- 初心者の方から、配列のソートに関する質問です。具体的には、テキストファイルから読み込んだ配列をソートする方法について教えてください。
- 質問者はテキストファイルから読み込んだ配列をソートしたいと考えています。ソート後の配列の要素を出力する際、特定の条件でソートを行いたいとしています。
- 具体的には、配列の要素が同じ場合にさらに別の条件(日時)でソートする方法を知りたいとしています。この条件を満たすソートの方法についてアドバイスを求めています。
- みんなの回答 (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; } ?>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
早い順のソートとは? またもともと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>"; } ?>
お礼
ありがとうございました。
補足
ありがとうございました。 書き方が不十分で、すみません。 先頭の数字で ユーザー 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 なら、解答した時間順にソートしたいのです。 よろしくお願いします。
お礼
ありがとうございました。助かりました。