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