作成日: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())