PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
新人
「PHPで配列を使っているのですが、要素を並び替える方法はありますか?」
先輩
「あるよ!PHPには配列を並び替えるための便利な関数がいくつかあるんだ。例えば、昇順や降順にソートできるsort()やrsort()があるよ。」
新人
「具体的にどんな風に使うのですか?」
先輩
「じゃあ、基本的な使い方を詳しく見ていこう!」
1. 配列のソートとは?
ソートとは、データを一定の順序に並び替えることを意味します。例えば、数値の小さい順(昇順)や、大きい順(降順)、または名前のアルファベット順などに並び替えることができます。
PHPには、配列を簡単にソートするための関数が用意されています。
sort(): 配列を昇順(小さい順)に並び替えるrsort(): 配列を降順(大きい順)に並び替えるasort(): 連想配列を値の昇順に並び替えるksort(): 連想配列をキーの昇順に並び替える
それでは、sort()とrsort()の基本的な使い方を見ていきましょう。
2. PHPで配列をソートする基本的な方法(sort と rsort)
2.1 sort() を使って昇順に並び替える
sort()を使うと、配列の要素を小さい順に並び替えます。
<?php
$numbers = [5, 2, 8, 1, 3];
sort($numbers);
print_r($numbers);
?>
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 8
)
このように、sort()を使うと、数値を小さい順に並び替えることができます。
2.2 rsort() を使って降順に並び替える
rsort()を使うと、配列の要素を大きい順に並び替えます。
<?php
$numbers = [5, 2, 8, 1, 3];
rsort($numbers);
print_r($numbers);
?>
Array
(
[0] => 8
[1] => 5
[2] => 3
[3] => 2
[4] => 1
)
このように、rsort()を使うと、数値を大きい順に並び替えることができます。
2.3 文字列のソート
文字列の配列をsort()でソートすると、アルファベット順に並び替えられます。
<?php
$fruits = ["banana", "apple", "cherry", "grape"];
sort($fruits);
print_r($fruits);
?>
Array
(
[0] => apple
[1] => banana
[2] => cherry
[3] => grape
)
このように、sort()は文字列をアルファベット順に並び替えます。
2.4 文字列を降順に並び替える
文字列を降順(Z→Aの順)に並び替えるには、rsort()を使います。
<?php
$fruits = ["banana", "apple", "cherry", "grape"];
rsort($fruits);
print_r($fruits);
?>
Array
(
[0] => grape
[1] => cherry
[2] => banana
[3] => apple
)
このように、rsort()を使うと、アルファベットの降順に並び替えることができます。
次のセクションでは、連想配列をソートする方法(asort() や ksort())を詳しく解説します。
3. 連想配列のソート方法(asort と arsort)
連想配列は、キーと値のペアでデータを管理する配列です。通常の配列とは異なり、sort() や rsort() を使用すると、キーと値の関連が崩れてしまいます。そこで、連想配列の値を基準にソートするには asort() や arsort() を使用します。
3.1 asort() を使った値の昇順ソート
asort() を使用すると、連想配列の値を昇順(小さい順)に並び替えます。
<?php
$users = [
"田中" => 35,
"佐藤" => 28,
"鈴木" => 42
];
asort($users);
print_r($users);
?>
Array
(
[佐藤] => 28
[田中] => 35
[鈴木] => 42
)
このように、値を基準にして昇順に並び替えられます。
3.2 arsort() を使った値の降順ソート
arsort() を使用すると、連想配列の値を降順(大きい順)に並び替えます。
<?php
arsort($users);
print_r($users);
?>
Array
(
[鈴木] => 42
[田中] => 35
[佐藤] => 28
)
このように、値を基準にして降順に並び替えられます。
4. 配列をキーでソートする方法(ksort と krsort)
連想配列をキーの順番で並び替えたい場合は ksort() や krsort() を使用します。
4.1 ksort() を使ったキーの昇順ソート
ksort() を使用すると、キーを昇順(アルファベット順・五十音順)に並び替えます。
<?php
$users = [
"鈴木" => 42,
"佐藤" => 28,
"田中" => 35
];
ksort($users);
print_r($users);
?>
Array
(
[佐藤] => 28
[田中] => 35
[鈴木] => 42
)
このように、キーの順番で昇順に並び替えられます。
4.2 krsort() を使ったキーの降順ソート
krsort() を使用すると、キーを降順(逆五十音順)に並び替えます。
<?php
krsort($users);
print_r($users);
?>
Array
(
[鈴木] => 42
[田中] => 35
[佐藤] => 28
)
このように、キーを基準にして降順に並び替えられます。
5. 数値と文字列のソートの違い
PHPのソート関数は、数値と文字列を区別せずに処理します。しかし、データの型によって思わぬ結果になることがあります。
5.1 数値のソート
数値の配列をsort()でソートすると、通常は期待通りの動作をします。
<?php
$numbers = [100, 2, 50, 20];
sort($numbers);
print_r($numbers);
?>
Array
(
[0] => 2
[1] => 20
[2] => 50
[3] => 100
)
このように、数値はそのまま昇順に並び替えられます。
5.2 文字列の数値としてのソート
文字列の数値をsort()でソートすると、予期しない結果になることがあります。
<?php
$numbers = ["100", "2", "50", "20"];
sort($numbers);
print_r($numbers);
?>
Array
(
[0] => 100
[1] => 2
[2] => 20
[3] => 50
)
このように、文字列として扱われるとアルファベット順になり、意図した並び順にならない場合があります。
5.3 SORT_NUMERIC を使う
数値として正しく並び替えるには、SORT_NUMERIC フラグを指定します。
<?php
$numbers = ["100", "2", "50", "20"];
sort($numbers, SORT_NUMERIC);
print_r($numbers);
?>
Array
(
[0] => 2
[1] => 20
[2] => 50
[3] => 100
)
このように、SORT_NUMERIC を指定すると、文字列の数値も正しく数値として並び替えられます。
次のセクションでは、ユーザー定義関数を使ったソート方法について解説します。
6. ユーザー定義関数を使ったソート(usort)
PHPの組み込みソート関数(sort(), rsort(), asort(), ksort() など)は基本的なソートに便利ですが、独自のルールで並び替えをしたい場合には usort() を使用します。
6.1 usort() を使ったカスタムソート
usort() を使うと、自分で定義した比較関数を使ってソートできます。例えば、数値の配列を偶数優先で並べたい場合、以下のように記述します。
<?php
$numbers = [10, 3, 2, 8, 7, 5, 4];
usort($numbers, function ($a, $b) {
// 偶数を先に、次に奇数を並べる
if ($a % 2 === 0 && $b % 2 !== 0) {
return -1;
} elseif ($a % 2 !== 0 && $b % 2 === 0) {
return 1;
} else {
return $a - $b;
}
});
print_r($numbers);
?>
Array
(
[0] => 2
[1] => 4
[2] => 8
[3] => 10
[4] => 3
[5] => 5
[6] => 7
)
このように usort() を使うことで、独自のソートルールを適用できます。
7. ソートを活用した実践的な例(データ一覧の表示)
ソートを実際の開発で活用する例として、PHPでデータ一覧を並び替えて表示する方法を紹介します。
7.1 ユーザー一覧を年齢順に並び替える
ユーザーの一覧を年齢順に並べる例を見てみましょう。
<?php
$users = [
["name" => "田中", "age" => 30],
["name" => "佐藤", "age" => 25],
["name" => "鈴木", "age" => 40]
];
usort($users, function ($a, $b) {
return $a["age"] - $b["age"];
});
foreach ($users as $user) {
echo "名前: {$user["name"]}, 年齢: {$user["age"]}歳\n";
}
?>
名前: 佐藤, 年齢: 25歳
名前: 田中, 年齢: 30歳
名前: 鈴木, 年齢: 40歳
このように、usort() を使うと、年齢順に並べ替えて一覧を表示できます。
7.2 商品リストを価格順に並び替える
商品リストを価格の安い順に並び替える例を紹介します。
<?php
$products = [
["name" => "ノートパソコン", "price" => 120000],
["name" => "スマートフォン", "price" => 80000],
["name" => "イヤホン", "price" => 5000]
];
usort($products, function ($a, $b) {
return $a["price"] - $b["price"];
});
foreach ($products as $product) {
echo "商品名: {$product["name"]}, 価格: {$product["price"]}円\n";
}
?>
商品名: イヤホン, 価格: 5000円
商品名: スマートフォン, 価格: 80000円
商品名: ノートパソコン, 価格: 120000円
このように、価格順に並び替えて表示することができます。
8. PHP の配列操作を学ぶためのおすすめの方法
PHPの配列のソートをさらに深く学ぶためのおすすめの方法を紹介します。
8.1 公式ドキュメントを読む
PHPの公式マニュアルには、配列のソートに関する詳細な情報が掲載されています。
8.2 オンライン学習サイトを活用する
実際に手を動かしながら学ぶことで、理解が深まります。
8.3 練習問題を解いてみる
プログラミングの練習問題を解くことで、配列のソートを実践的に学ぶことができます。
PHPの配列ソートをしっかり学ぶことで、データの管理がより便利になります。実際にコードを書いて試しながら、理解を深めていきましょう!
まとめ
本記事では、PHPの配列ソートに関する代表的な関数を一通り学びました。sort()とrsort()による昇順・降順ソートから始まり、asort()やarsort()、ksort()やkrsort()といった連想配列のキーや値を軸とした並び替えまでを網羅しました。さらに、usort()を使ったカスタムソートでは、実践的な場面で活用できる柔軟な配列処理も体験しました。
例えば、下記のようにusort()で年齢順にユーザーを並び替えるコードは、実務でもよく使われる形です。
<?php
$users = [
["name" => "佐藤", "age" => 25],
["name" => "田中", "age" => 30],
["name" => "鈴木", "age" => 40]
];
usort($users, function($a, $b) {
return $a["age"] - $b["age"];
});
print_r($users);
?>
ソート処理は単なる並び替えにとどまらず、データの可視化・レポート作成・ユーザー体験の向上にも直結する重要な機能です。PHPでは、数値・文字列・連想配列・オブジェクト配列など、さまざまな形式のデータに柔軟に対応したソート関数が提供されているため、適材適所で使い分けることで効率的な実装が可能となります。
特にSORT_NUMERICなどのフラグを活用することで、文字列と数値の曖昧な処理を防ぎ、より正確で信頼性の高いソート処理が実現できます。
本記事で紹介したサンプルコードを実際に試しながら学ぶことで、配列の構造やソートのロジックに対する理解が深まり、今後の開発にも活かせるスキルとなるでしょう。PHPの配列処理はプログラミング初心者にもやさしく、かつ奥が深い分野ですので、繰り返し練習することで自然に身につけることができます。
また、データベースや外部APIから取得した情報をソートして表示するケースでも、今回のようなソート処理は役立ちます。現場で活用する機会は非常に多いため、基礎を確実に押さえておきましょう。
新人
「配列のソート関数、たくさんあって最初は混乱しましたが、整理してみると使い分けが見えてきました!」
先輩
「そのとおり。sort()とrsort()は基本の並び替え、asort()やksort()は連想配列用、そしてusort()はカスタムロジックだね。」
新人
「特にusort()は、実務で柔軟に対応できそうだと思いました。ユーザー一覧を年齢や名前順に並び替える場面とか…」
先輩
「そうだね。PHPのソート関数は思っている以上に奥深いよ。条件を変えて、いろんな並び替えを試してみるともっと理解が深まるよ。」
新人
「次はソート結果をHTMLテーブルで表示することも試してみます!」