PHP で連想配列の配列を指定したキーの値で並べ替える方法

Minahil Noor 2023年1月30日
  1. PHP で連想配列の配列を与えられたキーの値で並べ替えるには array_multisort() 関数を使用する
  2. 関数 usort() を用いて、PHP で連想配列の配列を与えられたキーの値で並べ替える
PHP で連想配列の配列を指定したキーの値で並べ替える方法

この記事では、PHP で連想配列の array を指定したキーの値でソートする方法を紹介します。

  • 関数 array_multisort() を使用する
  • 関数 usort() を使用する

PHP で連想配列の配列を与えられたキーの値で並べ替えるには array_multisort() 関数を使用する

組み込みの関数 array_multisort() を利用して、連想配列の配列を与えられたキーの値でソートすることができます。この関数は一度に多くの配列を並べ替えることもできますし、多次元配列を並べ替えることもできます。この関数を使用するための正しい構文は以下の通りです。

str_replace($arrayName, $sort_order, $sort_flags);

組み込み関数 array_multisort() は 3つのパラメータを持ちます。パラメータの詳細は以下の通りです。

パラメータ 説明
$arrayName 必須 これはソートしたい array です。
$sort_order オプション 配列をソートする順序を指定します。昇順であれば SORT_ASC、降順であれば SORT_DESC となります。デフォルト値は SORT_ASC です。
$sort_flags オプション ソートのオプションを指定します。これを読むにはこちらを参照してください。

この関数は成功した場合に TRUE を返します。それ以外の場合は FALSE を返します。

以下のプログラムは、array_multisort() 関数を用いて連想配列の配列を指定したキーの値でソートする方法を示しています。

<?php 
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
$marks = array();
foreach ($result as $key => $row)
{
    $marks[$key] = $row['marks'];
    
}
array_multisort($marks, SORT_DESC, $result);
print_r($result);  
?> 

元の配列のマークを含む配列 $marks を作成しました。その後、関数 array_multisort() を用いて $marks の配列を $result の配列に基づいてソートします。出力は $result 配列をソートしたものになります。

出力:

Array
(
    [0] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

    [1] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [2] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [3] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [4] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [5] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

)

配列はマークのキーの値の降順でソートされます。

関数 usort() を用いて、PHP で連想配列の配列を与えられたキーの値で並べ替える

PHP では、usort() 関数を使用して連想配列の配列を指定したキーの値でソートすることもできます。この関数は、ユーザ定義の関数を用いて配列をソートします。この関数を使用するための正しい構文は以下の通りです。

preg_replace($arrayName, $functionName);

関数 usort() は 2つのパラメータを受け付ける。パラメータの詳細は以下の通りです。

パラメータ 説明
$arrayName 必須 並べ替えたいのは array です。
$functionName 必須 これは、渡された配列をソートするユーザ定義の関数です。

成功した場合は TRUE、そうでない場合は False を返します。配列をソートするプログラムは以下のようになります。

<?php 
function DescSort($item1,$item2)
{
    if ($item1['marks'] == $item2['marks']) return 0;
    return ($item1['marks'] < $item2['marks']) ? 1 : -1;
}
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
usort($result,'DescSort');
print_r($result);
?> 

出力:

Array
(
    [0] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

    [1] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [2] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [3] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [4] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [5] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

)

昇順ソートの場合、この関数は次のようになります。

<?php 
function AscSort($item1,$item2)
{
    if ($item1['marks'] == $item2['marks']) return 0;
    return ($item1['marks'] > $item2['marks']) ? 1 : -1;
}
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
usort($result,'AscSort');
print_r($result);
?> 

出力:

Array
(
    [0] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

    [1] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [2] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [3] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [4] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [5] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

)

関連記事 - PHP Array