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

解決済みの質問

2次元配列のソート

2次元配列のデータをソートしたいのですが方法がわかりません。初歩的な質問ですが、ご存知の方、よろしくお願いいたします。

(例)
商品コード、商品名、金額、有効期限のデータを以下のように持っています。
$data[0] = ("001", "商品A", 5200, "2004/5");
$data[1] = ("002", "商品B", 350, "2005/1");
$data[2] = ("003", "商品C", 10800, "2004/3");
・・・・
データの項目(商品コード、商品名など)数は固定ですが、データ数、内容は変化します。

2次元配列でデータがあり、商品コードで降順にソート、金額で昇順にソートなどのソートを行う方法はありますか?

No.760468 で同じような質問があり、array_multisort
が回答としてあがっていましたが、上記データの場合ソートできないようなので質問させていただきました。
なお、環境によりデータベースを使用することはできません。

投稿日時 - 2004-02-07 21:11:48

QNo.773060

困ってます

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

例えば、金額での昇順ソート

$data_max = 1000 ; //データの個数
$s = 2 ; // 3番目の金額なので

for ($i=0 ;$i<$data_max ;$i++){
  $sort[$i] = $i ;
}
for ($i=0 ;$i<$data_max-1 ;$i++){
for ($j=0 ;$j<$data_max ;$j++){
if ( $data[$sort[$i]][$s] > $data[$sort[$j]][$s] ){
// このifの判定をいじれば昇順降順などを操作できます
$k = $sort[$i] ;
$sort[$i] = $sort[$j] ;
$sort[$j] = $k ;
}
print "$data[sort[$i]][0] $data[sort[$i]][1] $data[sort[$i]][2] $data[sort[$i]][3]\n" ;
}

投稿日時 - 2004-02-08 00:33:40

お礼

お礼が遅くなって済みませんでした。
回答ありがとうございます。
2次元配列をソートする関数のようなものはないのですね。
回答いただいたロジックを用いてソートができるようになりました。
アルゴリズムはあまり理解していなかったので、これを機に勉強したいと思います。
ありがとうございました。

投稿日時 - 2004-02-13 21:02:21

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

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

回答(2)

ANo.1

まず基本的なアルゴリズムとかを覚えたほうが良いと思いますよ。
ソートは
クイックソート
バブルソート
などが有名なアルゴリズムですね。
これらを踏まえて、PHPに置き換えれば良いですね。

投稿日時 - 2004-02-07 21:42:28

あなたにオススメの質問