作成日:2018-06-24, 更新日:2019-07-29
基本
・元の連想配列から、ソートで使いたいキーを添え字にして、値だけの配列を用意
・「array_multisort()」でソートする
// 元の連想配列
$seed = array(
array( 'id'=>1, 'name'=>'鳥精', 'price'=>'140'),
array( 'id'=>2, 'name'=>'豚精', 'price'=>'140'),
array( 'id'=>3, 'name'=>'餅ベーコン', 'price'=>'120'),
array( 'id'=>4, 'name'=>'丸ごとシマウマ', 'price'=>'160'),
);
// ソートのルール用の配列
$sortKey_name = array();
foreach ($seed as $key=>$value) {
$sortKey_name[$key] = $value['name'];
}
// ソート
$result = array_multisort( $sortKey_name, SORT_ASC,
$seed);
// 結果
if ( $result ) {
// ソートされた配列
var_dump($seed);
}
else {
echo 'ソートに失敗';
}
複数のキーを対象にソート
ソートで使いたい分、用意する
$sortKey_name = array();
$sortKey_price = array();
foreach ($seed as $key=>$value) {
$sortKey_name[$key] = $value['name'];
$sortKey_price[$key] = $value['price'];
}
$result = array_multisort( $sortKey_name, SORT_ASC,
$sortKey_price, SORT_ASC,
$seed);
if ( $result ) {
// ソートされた配列
var_dump($seed);
}
else {
echo 'ソートに失敗';
}
オプション
並び替えの順や型の指定はカンマで区切っていく
array_multisort( $sortKey_name, SORT_ASC, SORT_STRING,
$sortKey_price, SORT_ASC, SORT_NUMERIC,
$seed);
・SORT_REGULAR - アイテムを通常通り比較します (型を変更しません)。
・SORT_NUMERIC - アイテムを数値として比較します。
・SORT_STRING - アイテムを文字列として比較します。
・SORT_LOCALE_STRING - 現在のロケールを考慮して、アイテムを文字列として比較します。利用するロケールは setlocale() で変更できます。
・SORT_NATURAL - natsort() と同様の「自然順」で、アイテムを文字列として比較します。
・SORT_FLAG_CASE - SORT_STRING や SORT_NATURAL と (ビット OR で) 組み合わせて、 大文字小文字を区別しない文字列のソートを指定します。
関連項目
・配列のソートとキーの振り直し(sort()、rsort()、asort()、arsort()、ksort()、krsort()、array_values())