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を読みだしたりしても作ることも出来ますよね。
ここでのarray_multisortの
第1引数は、番号でソートしてみた為、キー値のbangouにしました。
第2引数は、キー値のデータの並べ方で「SORT_DESC」は降順。「SORT_ASC」は昇順です。
第3引数は、ソート対象の多重配列になります。
$dataSetを、キー値のbangouの降順で並べ代えるという事になります。
この処理の結果、$dataSetは並び変わっているはずです。
array_multisortは、引数の付け方(場所)が場合によって変わるので注意が必要です。
こんな事をして、もっと複雑にソートも出来るようです。
しかし、私が試した所、時々ソートを失敗したりしたので(プログラムミスがあるのかも)、
先頭データでソートするなら、
rsort($dataSet);
した方が良いのかも?
(同じデータ条件で$dataSetを処理した場合、
array_multisortでは失敗(ソートしないか時々ソートしない。)
rsortでは成功したんですよね・・・。)
記述:2013年06月頃
ちょっと使用したての「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
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ