こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列のソート

下記のような形でデータを取得し結果を配列に格納し、
降順にソートしたいのですが、いい方法が見つかりません。いい方法はあるでしょうか。よろしくお願いします。

テーブル構造(test)
ID|name |point|area|
====================
1 |Aさん|56 | A |
2 |Bさん|12 | B |
3 |Cさん|24 | B |
4 |Dさん|34 | B |

$sql = "select * from test";

$result = mysql_query($strSQL);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

ここで配列に格納

}

配列への格納方法と、pointの降順にソートする
方法が知りたいです。
最終的に、Aさん、Dさん、Cさん、Bさんと
なるようにしたいです。

投稿日時 - 2006-04-07 19:26:45

QNo.2077905

すぐに回答ほしいです

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

array_multisort()を使うとか。こんな感じ:

$t[] = array( 'ID'=>1,'name'=>'A','point'=>56,'area'=>'a' );
$t[] = array( 'ID'=>2,'name'=>'B','point'=>12,'area'=>'b' );
$t[] = array( 'ID'=>3,'name'=>'C','point'=>24,'area'=>'b' );
$t[] = array( 'ID'=>4,'name'=>'D','point'=>34,'area'=>'b' );
array_multisort( array_map( create_function( '$a', 'return $a["point"];' ), $t ), SORT_DESC, $t );
print_r( $t );

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

投稿日時 - 2006-04-07 21:37:59

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> 降順にソート
select * from test order by point DESC
――みたいにクエリでソートすれば良いのでは。

> 配列に格納
$table[] = $row;
――みたいに、fetchした配列を、配列に追加して多次元配列にすれば良いのでは。

投稿日時 - 2006-04-07 19:53:55

補足

ご回答ありがとうございます。
クエリでソートはできないのです。
取得した後で配列に入れてソートするしかないです。

ちなみに上のソースに追加ですが、クエリでデータを取得して、配列に格納するところは以下のような形にしてみました。ここから後、pointで降順にソートできればいいのですが。。。

for ($j = 0; $j <= 1; $j++) {
$count=0;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$test[$j][$count]["point"] = $row["point"];
$test[$j][$count]["name"] = $row["name"];
$test[$j][$count]["area"] = $row["area"];
$count = $count + 1;
}
}

投稿日時 - 2006-04-07 20:03:17