PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPでarray_multisortを使って多次元配列を複数キーでソートする方法

PHPでは、array_multisort関数を使用することで、多次元配列を複数のキー(カラム)に基づいて並べ替えることができます。この関数は、複数の配列や多次元配列を一度にソートできる強力な機能を提供します。

基本的な使い方

以下の例では、event_typeを降順に、同じ値の場合はtitleを昇順にソートしています。

$my_list = array(
    array('ID' => 1, 'title' => 'data one', 'event_type' => 'one'),
    array('ID' => 2, 'title' => 'data two', 'event_type' => 'zero'),
    array('ID' => 3, 'title' => 'data three', 'event_type' => 'one'),
    array('ID' => 4, 'title' => 'data four', 'event_type' => 'zero')
);

# ソート対象のカラムの値を抽出し、配列としてまとめます。
# この配列をarray_multisort関数に渡します。
$sort = array();
foreach($my_list as $k=>$v) {
    $sort['title'][$k] = $v['title'];
    $sort['event_type'][$k] = $v['event_type'];
}

# event_typeは降順(SORT_DESC)、titleは昇順(SORT_ASC)でソートします。
array_multisort($sort['event_type'], SORT_DESC, $sort['title'], SORT_ASC, $my_list);

処理の流れ

まず、foreachループを使って元の配列から各キーの値だけを取り出し、ソート用の配列を作成します。その後、array_multisortにソート条件を順番に指定することで、優先順位の高いキーから順に並べ替えが行われます。最後の引数に元の配列を渡すことで、元の多次元配列自体が並べ替えられます。

PHP 5.5.0以降での書き方

PHP 5.5.0以降では、array_column関数を使うことで、foreachループを書かずに簡潔に記述できます。

array_multisort(array_column($my_list, 'event_type'), SORT_DESC,
array_column($my_list, 'title'), SORT_ASC,
$my_list);

array_columnは、多次元配列から指定したキーの値だけを抽出して配列として返す関数です。これにより、コードが大幅にシンプルになります。

実行結果

上記のコードを実行すると、以下の出力が得られます。

array (
    0 =>
    array (
      'ID' => 4,
      'title' => 'data four',
      'event_type' => 'zero',
    ),
    1 =>
    array (
      'ID' => 3,
      'title' => 'data two',
      'event_type' => 'zero',
    ),
    2 =>
    array (
      'ID' => 1,
      'title' => 'data one',
      'event_type' => 'one',
    ),
    3 =>
    array (
      'ID' => 2,
      'title' => 'data three',
      'event_type' => 'one',
    ),
)

結果を見ると、event_typeが「zero」の要素が先頭に来て降順で並び、同じ「zero」の中ではtitleが昇順(data four → data two)に並べ替えられていることが確認できます。このように、array_multisortを使えば、複数の条件を組み合わせた柔軟なソートが簡単に実現できます。

  1. PHPのsort()関数とは?配列を昇順にソートする方法をわかりやすく解説

    PHPのsort()関数は、配列の要素を昇順(小さい値から大きい値へ)に並べ替えるための組み込み関数です。基本構文sort(arr, flag)パラメータarr − ソート対象となる配列を指定します。flag − ソートの動作を指定するオプションのフラグです。省略可能です。0 = SORT_REGULAR − デフォルト値。要素を通常の方法で比較し、型の変更は行いません。1 = SORT_NUMERIC − 要素を数値として比較します。2 = SORT_STRING − 要素を文字列として比較します。3 = SORT_LOCALE_STRING − 現在のロケールに基づいて、要素を文字列として

  2. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に