• 締切済み

PHPによる並べ替え(ソーティング)のプログラム方法

例えば次のような表があったとします。 ------------------- |名前|国語|数学|英語| ------------------- | B | 75 | 82 | 69 | ------------------- | C | 87 | 80 | 71 | ------------------- | A | 85 | 73 | 92 | ------------------- これを例えば国語の点数の高い順で並べ替えるとこうなりますよね。 ------------------- |名前|国語|数学|理科| ------------------- | C | 87 | 80 | 71 | ------------------- | A | 85 | 73 | 92 | ------------------- | B | 75 | 82 | 69 | ------------------- さてここで質問なのですが、上のような数字や名前のアルファベット順でのソーティングを実現するプログラムは、どのように作成すればよいのでしょうか。 済みませんがどなたかお教え下さい。勿論教えるときに例として上の表を用いてもかまいません。

みんなの回答

回答No.5

#2です。 これからつくるなら、#1、#4の方が言ってるように MySQLなどのデータベースを使ったほうがいいですね。 パフォーマンスの面からも。 おやりになりたいことは実現可能ですが、 もうちょっと具体化して、実際につくって見てくださいな。 とりあえず、MySQL + PHP の参考ページ挙げときます。

参考URL:
http://www.t.daito.ac.jp/~t038218/webdb/webdb_1.html
  • sisya
  • ベストアンサー率39% (97/244)
回答No.4

結論から言うと、 表示部分だけPHPで作成して ソーティングは全部MySQLに任せるのが 一番効率的だと思いますし、 何より早く実用化できます。 …が、やり取りを見ている限り はっきり言ってかなり調査不足な感じですね… SQLを使うのでしたらまずSQLの基本… せめてSelect文位は見ておいたほうが良かったと思います。 それに加えてPHPでMySQLを使う基本ともいえる 「mysql_query」を知っていれば質問する必要もないかと思います。 一応、例を上げておきます。 例: (仮にNobNOVAさんの示されているテーブルを「TEST」とします) $Kyoka = 1; # 教科(1:名前,2:国語,3:数学,4:理科) $Query = "select * from TEST "; switch($1){ case 1: # 名前 $Query .= "where 名前 asc;"; break; case 2: # 国語 $Query .= "where 国語 asc;"; break; case 3: # 数学 $Query .= "where 数学 asc;"; break; case 4: # 理科 $Query .= "where 理科 asc;"; break; default: # 他 $Query .= ";"; } $Res = mysql_query($Query) or die ("SQLエラー"); 後は$Resを使って一覧表示させれば、 お好みの項目でソーティング済のデータが得られます。

参考URL:
http://www.php.net/manual/ja/ref.mysql.php
回答No.3

えーと、#2です。 >しかし、例えば上の例で対象人数が100人や200人もいる場合は、 >配列を1個1個書いていくのは非常に面倒だし間違いやすいと思います。 #2の回答の頭で言ったんですけど、その100人、200人の元データは どういったかたちであるんですか。 PHPで読み込めるものであれば、読み込む処理を付け加えれば よいだけのことです。

NobNOVA
質問者

補足

遅くなりまして申し訳ありません。 実はそのデータベースそのものはまだ作ってなくて、これから作る予定なのですが、今作ろうと思っているものは、それらのデータがテーブルで並べられていて、リンクをクリックすると、それらがソーティングされてまた別のソーティング方法で表される、というものです。 個人的にはデータベースをもとから作っておいて、追加データがある場合は別段苦労もなくデータをそのデータベースに追加できるという形にしたいのですが、出来ますでしょうか。

回答No.2

元のデータはどういったかたちであるんでしょうか。 とりあえず、配列ソートする例。 $ary = array(array("B","C","A"),array(75,87,85),array(82,80,73),array(69,71,92)); array_multisort($ary[1],SORT_DESC,SORT_NUMERIC,         $ary[0],SORT_ASC,SORT_STRING,         $ary[2],SORT_ASC,SORT_NUMERIC,         $ary[3],SORT_ASC,SORT_NUMERIC); for($i=0;$i<4;$i++){  for($j=0;$j<4;$j++){   print $ary[$j][$i]." ";  }  print "<br>"; }

参考URL:
http://php.s3.to/man/function.array-multisort.html
NobNOVA
質問者

お礼

御回答、どうもありがとうございます。 一応私も配列を用いたソーティングを考えてはみたんですが、この場合は、上の例のようなソーティングの対象の個数が少ない場合は有効ですね。 しかし、例えば上の例で対象人数が100人や200人もいる場合は、配列を1個1個書いていくのは非常に面倒だし間違いやすいと思います。この場合はどうすれば良いでしょうか。やはりMySQLに頼るしか無いのでしょうか。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.1

データベースを使わずに、と言うことでしょうか? データベース(MySQLなど)を使うのであれば $sql = "select 名前,国語,数学,理科 from TestTbl order by 国語 desc" という文を発行し、結果をテーブルとして表示させればよいです。 データベースを使わない場合は、PHPで配列変数を利用してソートすることになるでしょう。ただし、この場合はデータの変更がある度にソースを書き直さなければなりませんから、保守が大変です。

NobNOVA
質問者

お礼

あ、もう既に文中で回答を述べてますね。 すいません、ありがとうございます。 出来ればMySQLを用いたプログラミング方法を教えてくれる所があれば是非知りたいのですが。しかも初心者を対象としたところならなお理想的です。

NobNOVA
質問者

補足

早速どうもありがとうございます。 個人的にはデータベースのファイルはあるけど、MySQLを用いずに純粋にPHPだけでデータベースのファイルからデータを取ってきてソーティングを行う方法が私は欲しいのです。何故かというと、私のHPのサーバーがMySQLに対応していないからというのと、私自身がMySQLに不勉強なためです(汗) 勿論、MySQLを用いて簡単にプログラミングが出来るのであれば、それに越したことはありませんが。 というわけで、よろしくお願いします。