php :: ソート用の配列を用いた多次元配列のソート
2007/7/12 (Thu) at 10:17 am
後から追記。この記事を書いてからずいぶん経ってから、array_multisort関数のほうがずっとべんりだと知りました↓
てわけで、まったく有用な内容ではありませんが、いちおうこういう時代もあったという意味で残しておこうかなと。
番号順や文字コード順でなく、配列の配列に含まれるvalueに着目した順番にソートするやり方を考えてみました。
こんな配列があったとして↓
$array = array(
array(
"番号" => 1,
"めし" => 'とんかつ',
"お好み" => '毎日食いたい',
),
array(
"番号" => 5,
"めし" => 'ぎゅうどん',
"お好み" => 'たまに食いたい',
),
array(
"番号" => 12,
"めし" => 'ラーメン',
"お好み" => '毎日食いたい',
),
array(
"番号" => 4,
"めし" => 'シュガーレスガム',
"お好み" => '要らない',
),
array(
"番号" => 8,
"めし" => 'バブリシャスガム',
"お好み"=> '毎日食いたい',
),
array(
"番号" => 9,
"めし" => 'てんぷら',
"お好み" => '毎日食いたい',
),
array(
"番号" => 99,
"めし" => 'トマト',
"お好み"=> 'たまに食いたい',
),
);
番号順にソートする方法はいろんなところでよく紹介されてるんだけど(ココとか←ありがとうです)、「毎日食いたい→たまに食いたい→要らない」の順にソートするのはどうすりゃいいのかなぁという話。まずはソート用の配列をつくる↓
$sort_order_array = array( '毎日食いたい', 'たまに食いたい', '要らない', );
usortの引数にするためのユーザー定義関数をこんなかんじで↓
function cmp_dinner($a, $b){
global $sort_order_array;
$a_key = array_search($a['お好み'],
$sort_order_array);
$b_key = array_search($b['お好み'],
$sort_order_array);
if($a_key > $b_key){
return 1;
}else if($a_key < $b_key){
return -1;
}else{
return 0;
}
}
さいごはコレでイッパツできあがり↓
usort($array, "cmp_dinner");
やりたいことができました→出力結果
ていうやり方をじぶんで考えたんだけど、もっと良い方法がありましたら教えてください。array_searchという関数は『配列の中に指定したvalueがあればそのkeyを返す』という機能なので、それを使って「『毎日食いたい』は1番だよ(ていうか添え字はゼロですが)」とかいうのを教えてやるのですね。ちなみに、cmp_dinnerの中のelseのぶぶんにさらにifナンチャラと追加してやるとソート条件を追加できます。
多次元配列でアレコレやってると、なんだかパズルみたいで頭がくちゃくちゃになります私。データベースつくるときなんかものすごい悩んじゃいます。つくづくこういう才能がないなぁと思う瞬間です。生まれてこのかた、オセロゲーム勝ったことないですし(花札はちょと得意ですけどネ)。パパッとできちゃうひとは大尊敬ですよ。こんなのはプログラマの方にとってはルーチンなんでしょうけど、私くらいのレベルの者にはなんだか新鮮ですわ。おお、やったー、みたいな。
コメント・プリーズ!
PROFILE![]()
藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。
- www. http://www.3ot.net/
- email. admin [atmark] 3ot.net
- phone. 052 323 7376
RECENT ENTRIES![]()
- トウモロコシがおいしい
- ダイコクドラッグが近所にできた
- ライブドアのBLOGOSをよく読みます
- jQuery :: 画像のリロード
- タムの絵
- Javascript :: ecl.jsにながらくお世話になりました
- サーバ移転&ブログのデザインをすこし変えました
- php :: 正規表現 :: 名前つきキャプチャというのを習った
- jQuery :: ネストしたリスト + ui.sortable.js
- jQuery :: event delegationてナニ?
RECENT COMMENTS![]()
- トウモロコシがおいしい [4]
- ふ (07/09)
- いら (07/03)
- ふ (07/03)
- いら (07/03)
- php :: ファイルを強制的にダウンロードさせる [9]
- ふ (05/26)
- ふ (05/26)
- ふ (05/26)
- esperia (05/26)
- esperia (05/26)
- ふ (05/25)
- esperia (05/25)
- ふ (04/14)
- とほりすがり (04/13)
- タムの絵 [2]
- ふ (12/05)
- いら (12/04)
TOOLS![]()
- s-box.js
- Link2WikipediaEncoder
- QR_CodeGenerator
- PagerankChecker
- IntrocucePhpCodeOnBlog
- FaviconGenerator
- Whois
- SiteThumbnailGenerator (Beta)
- EmailAddressEncoder (Legacy!)
BOOKMARKS![]()
RESOURCES![]()
- 99designs
- COMPUTER ARTS
- CPAN
- PHP標準関数逆引き辞典
- SMASHING MAGAZINE
- UNIXコマンド
- ajaxload.info
- deviantART
- deviantART :: PS Brushes
- deviantART :: PS Shapes
- fotosearch.com
- hotscripts.com
- hotscripts.com :: php
- iconlet.com
- jQuery Reference
- php.net :: 関数レファレンス
- psbrushes.net
- turnkeyforms.com
ARCHIVE![]()
- 2010年7月 (1)
- 2010年1月 (1)
- 2009年12月 (2)
- 2009年11月 (3)
- 2009年10月 (1)
- 2009年9月 (9)
- 2009年8月 (7)
- 2009年6月 (7)
- 2009年5月 (1)
- 2009年4月 (8)
- 2009年3月 (1)
- 2009年1月 (1)
- 2008年12月 (3)
- 2008年11月 (1)
- 2008年4月 (1)
- 2008年1月 (3)
- 2007年12月 (1)
- 2007年10月 (3)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年7月 (13)
- 2007年6月 (22)
- 2007年5月 (30)
- 2007年4月 (15)
- 2007年3月 (12)
- 2007年2月 (7)
- 2007年1月 (16)
- 2006年12月 (23)
- 2006年11月 (9)
- 2006年10月 (3)
- 2006年9月 (2)
- 2006年8月 (6)
- 2006年7月 (4)
- 2006年6月 (6)
- 2006年5月 (10)
- 2006年3月 (17)
- 2006年2月 (8)
- すべての投稿 (266)
