SYNCERのロゴ
アイキャッチ画像

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 ) ;
Array
(
    [0] => 1
    [1] => 2
    [2] => 2
    [3] => 4
)

Array ( [0] => 100 [1] => 99 [2] => 97 [3] => 98 )

多次元配列をソート

$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 ) ;
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => D
        )

    [1] => Array
        (
            [0] => 2
            [1] => B
        )

    [2] => Array
        (
            [0] => 3
            [1] => A
        )

    [3] => Array
        (
            [0] => 4
            [1] => C
        )

)
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年6月25日 (日)
コンテンツを公開しました。