人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【PHP】
環境-----
CentOs 4.2
PHP 4.3.9

質問-----
あるCSVデータがあります。
(例)
key1,key2,key3
-----------------
a,5,あ
c,2,い
f,4,え
d,3,う
e,1,お


これを、ソートしたいのですが、
データベースなら、order byで簡単なのですが、データベースを利用しない方法で
うまいやり方が思いつきません。

何か良いclassやfunctionがあればご紹介ください。
pearの使用も可です。

●質問者: PEPOTA
●カテゴリ:インターネット ウェブ制作
✍キーワード:CentOS Class CSV Pear PHP
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● kidd-number5
●28ポイント ベストアンサー

array_multisortを使った

こちらの例はいかがでしょうか?

http://winofsql.jp/php/material/arraysort.htm

※大量の場合は一括して読むのはちょっと。。という感じですが。

◎質問者からの返答

ありがとうございます。

参考になります。

おっしゃるとおり、データの量が多いときは、とても遅くなりそうですね。


2 ● くまっぷす
●28ポイント

http://www.res-system.com/item/508

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

array_multisort関数があります。

質問の例だとkey1, key2, key3をひとつの配列にして、その配列が並んだ配列を作った上でarray_multisortをかければいいはずです。

◎質問者からの返答

ありがとうございます。


3 ● MoonWolf
●6ポイント

MySQLにはメモリ上に一時的なテーブルを作るヒープテーブルという機能があります。

/* test_tableからselectしたデータを元にtestというヒープテーブルを作成する */

CREATE TABLE test TYPE=HEAP SELECT key1,key2,key3 FROM test_table;

/* メモリ内でソートする */

SELECT key1,key2,key3 FROM test_table order by key1,key2,key3;

/* テーブルを削除する */

DROP TABLE test_table;

データベースを利用しないという条件には一致しませんが、この方法であればデータベースのORDER BYと必ず一致するので整合性の面では有効です。

◎質問者からの返答

この方法は知っていました。

しかし、今回は、MySQLを利用できないので、残念ですが、この手法は却下です。

ありがとうございます。


4 ● えるふん
●28ポイント

usort()という関数を使用することで自分の好きなソートができるようになります.

http://php.net/usort

手順は

になります.

◎質問者からの返答

ありがとうございます。

後ほどゆっくり調べます

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ