水曜以外もどうでしょう

北海道発。食べ歩きの記録グルメ情報や北海道の見どころなどをメモ替わりに書いています。

PREV | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| スポンサー広告 | --:-- | comments(-)| trackbacks(-)| TOP↑

≫ EDIT

phpで多次元配列のソート

array_multisortという便利な関数があるようだ。

今までは、ソートしたい要素の値をキーとする連想配列をつくり直してからksortを使っていた。
この場合、ソートすべき値がユニークである(ダブりがない)必要があり。

sortの値を昇順に並べ替える例。

$buf=array(
'0'=>array('name'=>'urawa','sort'=>2,'pref'=>'saitama'),
'1'=>array('name'=>'nahao','sort'=>4,'pref'=>'okinawa'),
'2'=>array('name'=>'kyoto','sort'=>3,'pref'=>'kyoto'),
'3'=>array('name'=>'sapporo','sort'=>1,'pref'=>'hokkaido')
);
foreach($buf as $key=>$row){
$sort[$key] = $row['sort'];
}

array_multisort($sort,SORT_ASC,$buf);

print_r($buf);


実行結果
----------
Array
(
[0] => Array
(
[name] => sapporo
[sort] => 1
[pref] => hokkaido
)

[1] => Array
(
[name] => urawa
[sort] => 2
[pref] => saitama
)

[2] => Array
(
[name] => kyoto
[sort] => 3
[pref] => kyoto
)

[3] => Array
(
[name] => nahao
[sort] => 4
[pref] => okinawa
)

)

----------


多次元という問題とともに、
第一ソートキー、第二ソートキーという様に、2つ以上のソート条件が付く場合がもっと問題だった。
これも、今まではやむを得ず、ソートすべき2カラムを "_" などで連結して繋げた文字列をつくり、その文字列をキーにした連想配列をつくり直してksortするという、なんとも面倒くさいことをやっていた。


例えば、
$buf['000002_saitama'] = $buf[0];
という感じ。

これも array_multisort を使うとわりと簡単なようだ。

第一条件:sortを昇順
第二条件:prefを降順

$buf=array(
'0'=>array('name'=>'urawa','sort'=>2,'pref'=>'saitama'),
'1'=>array('name'=>'nahao','sort'=>2,'pref'=>'okinawa'),
'2'=>array('name'=>'kyoto','sort'=>2,'pref'=>'kyoto'),
'3'=>array('name'=>'sapporo','sort'=>1,'pref'=>'hokkaido')
);
foreach($buf as $key=>$row){
$sort[$key] = $row['sort'];
$pref[$key] = $row['pref'];
}

array_multisort($sort,SORT_ASC,$pref,SORT_DESC,$buf);

print_r($buf);


実行結果
----------
Array
(
[0] => Array
(
[name] => sapporo
[sort] => 1
[pref] => hokkaido
)

[1] => Array
(
[name] => urawa
[sort] => 2
[pref] => saitama
)

[2] => Array
(
[name] => nahao
[sort] => 2
[pref] => okinawa
)

[3] => Array
(
[name] => kyoto
[sort] => 2
[pref] => kyoto
)

)
----------


参考ページ
http://www.multiburst.net/sometime-php/2008/05/php_1/


スポンサーサイト
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| php | 03:49 | comments:0| trackbacks:0| TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://vmemo.blog36.fc2.com/tb.php/180-f6a92484

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。