PHPの連想配列の配列をソートする方法
PHPで次のようなデータがあったとします。
value | id |
---|---|
50 | 1 |
30 | 2 |
60 | 3 |
10 | 4 |
これをvalueの列の値でソートすることを考えます。
array_multisortを使いますが、基本的な使い方から説明します。
目次
基本な使い方
valueの列とidの列の二つの配列があると考えます。
$ar1 = array(50,30,60,10);
$ar2 = array(1,2,3,4);
$ar2 = array(1,2,3,4);
この二つの配列は要素の数が同じで対応しています。
array_multisortを使うと、片方の配列をソートし、もう片方の配列は対応関係を崩さずに並び変わります。
これにより次のような状態になります。
$ar1 = array(10,30,50,60);
$ar2 = array(4,2,1,3);
$ar2 = array(4,2,1,3);
連想配列に応用
先ほどのデータが次のように連想配列に入っているとします。
$data[0]["value"] = 50;
$data[1]["value"] = 30;
$data[2]["value"] = 60;
$data[3]["value"] = 10;
$data[0]["id"] = 1;
$data[1]["id"] = 2;
$data[2]["id"] = 3;
$data[3]["id"] = 4;
$data[1]["value"] = 30;
$data[2]["value"] = 60;
$data[3]["value"] = 10;
$data[0]["id"] = 1;
$data[1]["id"] = 2;
$data[2]["id"] = 3;
$data[3]["id"] = 4;
これをvalueの値でソートすることにします。
array_multisort を使うのですが、いきなり代入することができないので、仮にソート用の配列 $sortkey を作ります。
foreach ($data as $key => $row) {
$sortkey[$key] = $row["value"];
}
$sortkey[$key] = $row["value"];
}
これにより次のような状態になります。
$sortkey[0] = 50;
$sortkey[1] = 30;
$sortkey[2] = 60;
$sortkey[3] = 10;
$data[0] = array("value"=>50,"id"=>1);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>60,"id"=>3);
$data[3] = array("value"=>10,"id"=>4);
$sortkey[1] = 30;
$sortkey[2] = 60;
$sortkey[3] = 10;
$data[0] = array("value"=>50,"id"=>1);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>60,"id"=>3);
$data[3] = array("value"=>10,"id"=>4);
ここで $sortkey と $data を array_multisort でソートします。
これにより次のような状態になります。
$sortkey[0] = 10;
$sortkey[1] = 30;
$sortkey[2] = 50;
$sortkey[3] = 60;
$data[0] = array("value"=>10,"id"=>4);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>50,"id"=>1);
$data[3] = array("value"=>60,"id"=>3);
$sortkey[1] = 30;
$sortkey[2] = 50;
$sortkey[3] = 60;
$data[0] = array("value"=>10,"id"=>4);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>50,"id"=>1);
$data[3] = array("value"=>60,"id"=>3);
結果的に連想配列である $data がvalueの値によりソートされたことになります。
関数
(2021年11月11日追記)
連想配列(辞書型配列)の配列をソートする関数を作りました。
function dict_sort($records, $key, $flag){
// $records 連想配列の配列
// $key ソートの対象となるキー
// $flag 昇順 SORT_ASC 降順 SORT_DESC
foreach($records as $i => $record){
$sortkey[$i] = $record[$key];
}
array_multisort($sortkey, $flag, $records);
return $records;
}
// $records 連想配列の配列
// $key ソートの対象となるキー
// $flag 昇順 SORT_ASC 降順 SORT_DESC
foreach($records as $i => $record){
$sortkey[$i] = $record[$key];
}
array_multisort($sortkey, $flag, $records);
return $records;
}
[ 2022年2月18日 | カテゴリー: PHP | タグ: ソート , 配列 ]
« コストコでリンツのチョコレートを購入 | ミュージックでジャンルを統一する方法 »
コメントを残す