忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

PHP array_multisort関数で複数配列を一気にソートする

☆PHP array_multisort関数で複数配列を一気にソートする
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る

ちょっと使用したての「array_multisort関数」の使い方をメモっておきます。
間違っていたらすみません。

array_multisort関数は、arrayに指定されたグループの何かのキーを指定して
ソートする事も出来るようです。

単純に、配列をソートする時にも使えそうです。

arrayは、
array( 'キー1' => $値,'キー2' => $値,・・・
といった感じにグループ化できます。

なので、例として
番号、名前、年齢というデータを

$dataSet[0] = array( 'bangou' => "123" , 'namae' => "なんとか太郎",'nennrei' => "20" );
$dataSet[1] = array( 'bangou' => "789" , 'namae' => "なんとか次郎",'nennrei' => "18" );
$dataSet[2] = array( 'bangou' => "456" , 'namae' => "なんとか五郎",'nennrei' => "40" );
とかいう風に入れておいて

それをキーである番号(bangou)でソートしたり、
キーである名前(namae)でソートしたり、
キーである年齢(nennrei)でソートしたり、
arrayのグループがぐちゃぐちゃにならないように、グループでソートするような事が出来るようです。

上のをarray_multisortで番号で昇順ソートしたとすると、
$dataSet[0]は、array( 'bangou' => "123" , 'namae' => "なんとか太郎",'nennrei' => "20" );
$dataSet[1]は、array( 'bangou' => "456" , 'namae' => "なんとか五郎",'nennrei' => "40" );
$dataSet[2]は、array( 'bangou' => "789" , 'namae' => "なんとか次郎",'nennrei' => "18" );

こんな感じでソートしたり出来るようです。

そのやり方の例です。


$countには、元となるデータの数(100件なら、3つ項目があるから300件というわけではなく100件)が入っているとします。
$bangouの配列には、番号
$namaeの配列には、名前
$nennreiの配列には、年齢
のデータがそれぞれ入っているとします。

それぞれの配列に入れるのは簡単でしょうから、
これはCSVを読みだしたりしても作ることも出来ますよね。



//ここでグループ毎に$dataSetに代入していく。
for( $i=0; $i<$count; $i++ )
{
     $dataSet[$i] = array( 'bangou'=>$bangou[$i] ,'namae'=>$namae[$i], 'nennrei'=>$nennrei[$i] );
}

//array_multisort($bangou, SORT_ASC, $dataSet);//昇順
array_multisort($bangou, SORT_DESC, $dataSet);//降順



ここでのarray_multisortの
第1引数は、番号でソートしてみた為、キー値のbangouにしました。
第2引数は、キー値のデータの並べ方で「SORT_DESC」は降順。「SORT_ASC」は昇順です。
第3引数は、ソート対象の多重配列になります。

$dataSetを、キー値のbangouの降順で並べ代えるという事になります。

この処理の結果、$dataSetは並び変わっているはずです。


array_multisortは、引数の付け方(場所)が場合によって変わるので注意が必要です。

こんな事をして、もっと複雑にソートも出来るようです。

array_multisort($bangou, SORT_DESC, $namae, SORT_ASC, $dataSet);


しかし、私が試した所、時々ソートを失敗したりしたので(プログラムミスがあるのかも)、
先頭データでソートするなら、
rsort($dataSet);
した方が良いのかも?
(同じデータ条件で$dataSetを処理した場合、
 array_multisortでは失敗(ソートしないか時々ソートしない。)
 rsortでは成功したんですよね・・・。)


記述:2013年06月頃





Twitter Facebook Google+ はてな Pocket LINE




一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

お名前

コメント




文字列関連
PHP テキストファイル内容を読み込んだ時等 改行を削除
PHP fopen関数で半角スペースが間にあるファイルは認識できない?
PHP CSVファイルを扱う為の関数の1つ
PHP array_multisort関数で複数配列を一気にソートする
PHP 気が付きにくいコーディングミスの一例
PHP ファイルがあるかないかを判断する関数で悩む
PHP 配列の初期化(使い回し配列の)
PHP 長い処理が止まってしまう場合 time of 30 seconds
その他
サーバー関連 ページの表示を早くする為に、ブラウザのキャッシュを活用
サーバー関連 Apacheアップデート、CGIからFastCGI「.htaccess」とかの変更例
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ