array_multisort - 複数、多次元の配列をソートする
array_multisortは、複数の配列をソートしたり、多次元配列をソートするのに利用する関数です。
構文
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
パラメータ
&$array1
ソート対象の配列。
$array1_sort_order
ソート順を定数で指定する。デフォルトは、SORT_ASC。この引数は省略できます。
- SORT_ASC
- 昇順。
- SORT_DESC
- 降順。
$array1_sort_flags
ソート方法を定数で指定する。デフォルトはSORT_REGULAR。この引数は省略できます。
- SORT_REGULAR
- 型変更をしないで比較する。
- SORT_NUMERIC
- 数値に型変更をして比較する。
- SORT_STRING
- 文字列に型変更をして比較する。
- SORT_LOCALE_STRING
- ロケールに基づいた文字列に変更して比較する。
- SORT_NATURAL
- 文字列として自然順で比較する。例えば、"test1"、"test10"、"test2"ではなく、"test1"、"test2"、"test10"のように、人間が馴染みやすくソートする。
- SORT_FLAG_CASE
- 文字列のソートで大文字、小文字を区別しない。
$...
2セット目、3セット目、と配列を指定できる。前のセットの処理でソート順が同じになった要素が、後のセットの処理で比較されることになる。
返り値
bool
成功した場合にtrue、失敗した場合にfalseを返す。
サンプルコード
<?php
$a = [ 4, 2, 2, 1 ] ;
$b = [ 98, 97, 99, 100 ] ;
array_multisort(
$a, SORT_ASC, // 1セット目
$b, SORT_DESC // 2セット目
) ;
デモ
複数の配列をソート
1セット目の処理で、$aが昇順にソートされます。$aは1(元は4番目)、2(元は2番目)、2(元は3番目)、4(元は1番目)という順に並び替えられますが、同時に$bも、100(元は4番目)、97(元は2番目)、99(元は3番目)、98(元は1番目)と、$aと同じように動く形で並び替えられます。そして$aのソート時に同じだった値、つまり99(元は2番目)と98(元は3番目)だけが、2セット目以降の処理で並び替えられることになるわけです。
<?php
/*** このコードは編集できます。 ***/
$a = [ 4, 2, 2, 1 ] ;
$b = [ 98, 97, 99, 100 ] ;
array_multisort(
$a, SORT_ASC, // 1セット目
$b, SORT_DESC // 2セット目
) ;
print_r( $a ) ;
echo "<BR>" ;
print_r( $b ) ;
多次元配列をソート
$aと同じように動く形で$bが並び替えられる、という仕組みを応用して、多次元配列をソートできます。下記は、1つ目の要素の昇順で、多次元配列をソートする例です。
<?php
/*** このコードは編集できます。 ***/
$a = [
[ 3, "A" ] ,
[ 2, "B" ] ,
[ 4, "C" ] ,
[ 1, "D" ] ,
] ;
// array_column( $a, 0 ) = [ 3, 2, 4, 1 ]
array_multisort( array_column( $a, 0 ), SORT_ASC, $a ) ;
print_r( $a ) ;
参考
- PHP: array_multisort
- PHPの公式リファレンス。