【PHP】Lesson4-6:配列を並び替えよう

ながみえ

一つ前のレッスンでは 配列の操作 について学習しました。

今回は 配列の並び替え について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数編
Lesson4:データ構造編

 ・Lesson4-1:配列の基本を理解しよう
 ・Lesson4-2:キーが文字列の配列を理解しよう
 ・Lesson4-3:配列の要素を追加/削除しよう
 ・Lesson4-4:配列を調査しよう
 ・Lesson4-5:配列を操作しよう
 ・Lesson4-6:配列を並び替えよう ◁今回はココ
 ・Lesson4-7:配列の多次元化を理解しよう
 ・確認問題4-1:ナインゲームを作ろう
 ・確認問題4-2:宝探しゲームを作ろう
 ・確認問題4-3:マルバツゲームを作ろう
Lesson5:クラス

<<前のページ

学習記事一覧

次のページ>>

配列の並び替えを理解して使いこなそう

PHPで配列のデータを整理したいときや、特定の順序で表示したいときに役立つのが「並び替え(ソート)」です。

sortやasort、shuffleなどの関数を使い分けることで、数値や文字列を昇順・降順に並べたり、配列の要素をランダムにシャッフルしたりと、さまざまな並び替え処理が簡単に行えるようになります。

本記事では、配列の並び替えに使える主な関数の特徴や使い方、初心者でもわかりやすい実例を紹介しながら、用途に合ったソート方法を解説します。

さっそく本文を読み進めて、PHPで配列を自由に並び替えるテクニックを身につけましょう!

配列の並び替えとは?|便利な組み込み関数一覧

配列の並び替えとは、配列の要素を昇順や降順、またはランダムな順序に変更する操作を指します。

PHPには以下のような配列を並び替えるための関数があります:

  • sort: 配列を昇順に並び替える(キーは無視されます)。
  • rsort: 配列を降順に並び替える(キーは無視されます)。
  • asort: 配列を昇順に並び替える(キーを保持します)。
  • arsort: 配列を降順に並び替える(キーを保持します)。
  • shuffle: 配列をランダムに並び替えます。
  • array_reverse: 配列を逆順に並び替えます。

これらの関数を使い分けることで、用途に応じた配列の並び替えが可能になります。

配列の並び替えのコード例|順序変更の具体例

組み込み関数を使って配列の要素を並び替えるコードの実例を紹介します。

昇順・降順の並び替え|sort()関数とrsort()関数

sort()関数を使うと配列の中身を昇順に、rsort()関数を使うと降順に並び替えることができます。

$array = [3, 1, 4, 1, 5];
sort($array);
print_r($array); // 出力: [1, 1, 3, 4, 5]

rsort($array);
print_r($array); // 出力: [5, 4, 3, 1, 1]

キーを保持して並び替える|asort()関数とarsort()関数

キーと値を持つ連想配列は、asort()関数やarsort()関数を使うことで、キーと値のペアを崩すことなく並び替えることができます。

$array = ["a" => 3, "b" => 1, "c" => 4];
asort($array);
print_r($array); // 出力: ["b" => 1, "a" => 3, "c" => 4]

arsort($array);
print_r($array); // 出力: ["c" => 4, "a" => 3, "b" => 1]

ランダムに並び替える|shuffle()関数

配列の中身をランダムに並び替えたい場合は、shuffle()関数を使用しましょう。

$array = [1, 2, 3, 4, 5];
shuffle($array);
print_r($array); // 出力: ランダムな順序(例: [4, 1, 5, 3, 2])

逆順に並び替える|array_reverse()関数

配列の中身を逆順に並び替えたい場合は、array_reverse()関数を使用しましょう。

$array = [1, 2, 3, 4, 5];
$array_reversed = array_reverse($array);
print_r($array_reversed); // 出力: [5, 4, 3, 2, 1]

まとめ|PHPの配列ソート関数を使いこなそう

配列の並び替えについて学んだことで、データの表示順を自由自在にコントロールできる力が身につきました。

sort()やrsort()を使った基本的な昇順・降順の並び替え、asort()やarsort()によるキーの保持、shuffle()やarray_reverse()での並び替え方法を、実際のコード例を通して理解できたはずです。

今後は、必要な場面に合わせて適切な関数を選び、配列操作をより効率的に行えるようになるでしょう。

引き続き、PHPの便利な機能を身につけて、ステップアップしていきましょう!

演習問題|sortやshuffleを使って配列を自在に並び替えよう

配列の並び替えを学ぶためのプログラムを作成しましょう。

まずランダムな整数を持つ配列を定義し、その配列をPHPの並び替え関数を使って昇順、降順、キーを保持した昇順・降順、ランダム順、逆順に並び替えて、それぞれの結果を出力するプログラムを作成してください。

この演習の要件

以下の要件に従ってコードを完成させてください。

  • 以下のランダムな整数を持つ配列を $numbers として定義してください: [34, 7, 23, 32, 5, 62]
  • 元の配列を出力してください。
  • 配列を sort 関数を使って昇順に並び替え、結果を出力してください。
  • 配列を rsort 関数を使って降順に並び替え、結果を出力してください。
  • 配列を asort 関数を使ってキーを保持したまま昇順に並び替え、結果を出力してください。
  • 配列を arsort 関数を使ってキーを保持したまま降順に並び替え、結果を出力してください。
  • 配列を shuffle 関数を使ってランダムに並び替え、結果を出力してください。
  • 配列を array_reverse 関数を使って逆順に並び替え、結果を出力してください。

ただし、以下のような実行結果となること。

元の配列:
Array
(
    [0] => 34
    [1] => 7
    [2] => 23
    [3] => 32
    [4] => 5
    [5] => 62
)

昇順に並び替えた配列 (sort):
Array
(
    [0] => 5
    [1] => 7
    [2] => 23
    [3] => 32
    [4] => 34
    [ 5] => 62
)

降順に並び替えた配列 (rsort):
Array
(
    [0] => 62
    [1] => 34
    [2] => 32
    [3] => 23
    [4] => 7
    [5] => 5
)

キーを保持して昇順に並び替えた配列 (asort):
Array
(
    [4] => 5
    [1] => 7
    [2] => 23
    [3] => 32
    [0] => 34
    [5] => 62
)

キーを保持して降順に並び替えた配列 (arsort):
Array
(
    [5] => 62
    [0] => 34
    [3] => 32
    [2] => 23
    [1] => 7
    [4] => 5
)

ランダムに並び替えた配列 (shuffle):
Array
(
    [0] => 23
    [1] => 62
    [2] => 5
    [3] => 7
    [4] => 34
    [5] => 32
)

逆順に並び替えた配列 (array_reverse):
Array
(
    [0] => 32
    [1] => 34
    [2] => 7
    [3] => 5
    [4] => 62
    [5] => 23
)

解き方のヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:$numbers 配列を定義し、ランダムな整数を格納
2:「元の配列:」を出力
3:print_r 関数で配列 $numbers の内容を出力
4:sort 関数を使用して $numbers を昇順に並び替え
5:「昇順に並び替えた配列 (sort):」を出力
6:print_r 関数で昇順に並び替えた $numbers を出力
7:rsort 関数を使用して $numbers を降順に並び替え
8:「降順に並び替えた配列 (rsort):」を出力
9:print_r 関数で降順に並び替えた $numbers を出力
10:元の配列を $numbers として再定義
11:asort 関数を使用して $numbers を昇順に並び替え(キーを保持)
12:「キーを保持して昇順に並び替えた配列 (asort):」を出力
13:print_r 関数で昇順に並び替えた(キー保持) $numbers を出力
14:arsort 関数を使用して $numbers を降順に並び替え(キーを保持)
15:「キーを保持して降順に並び替えた配列 (arsort):」を出力
16:print_r 関数で降順に並び替えた(キー保持) $numbers を出力
17:shuffle 関数を使用して $numbers をランダムに並び替え
18:「ランダムに並び替えた配列 (shuffle):」を出力
19:print_r 関数でランダムに並び替えた $numbers を出力
20:array_reverse 関数を使用して $numbers を逆順に並び替え、結果を $reversed に代入
21:「逆順に並び替えた配列 (array_reverse):」を出力
22:print_r 関数で逆順に並び替えた $reversed を出力

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

<?php

// 配列を定義します
$numbers = [34, 7, 23, 32, 5, 62];

// 元の配列を表示
echo "元の配列:" . PHP_EOL;
print_r($numbers);

/* 【穴埋め問題1】
ここにsort関数を使って配列を昇順に並び替えるコードを書いてください。
その後、「昇順に並び替えた配列 (sort):」と表示し、配列を出力するコードを書いてください。
*/

/* 【穴埋め問題2】
ここにrsort関数を使って配列を降順に並び替えるコードを書いてください。
その後、「降順に並び替えた配列 (rsort):」と表示し、配列を出力するコードを書いてください。
*/

// 元の配列を再定義(並び替え後の配列を初期状態に戻す)
$numbers = [34, 7, 23, 32, 5, 62];

/* 【穴埋め問題3】
ここにasort関数を使って配列を昇順に並び替えるコードを書いてください(キーを保持)。
その後、「キーを保持して昇順に並び替えた配列 (asort):」と表示し、配列を出力するコードを書いてください。
*/

/* 【穴埋め問題4】
ここにarsort関数を使って配列を降順に並び替えるコードを書いてください(キーを保持)。
その後、「キーを保持して降順に並び替えた配列 (arsort):」と表示し、配列を出力するコードを書いてください。
*/

/* 【穴埋め問題5】
ここにshuffle関数を使って配列をランダムに並び替えるコードを書いてください。
その後、「ランダムに並び替えた配列 (shuffle):」と表示し、配列を出力するコードを書いてください。
*/

/* 【穴埋め問題6】
ここにarray_reverse関数を使って配列を逆順に並び替えるコードを書いてください。
その後、「逆順に並び替えた配列 (array_reverse):」と表示し、配列を出力するコードを書いてください。
*/

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

演習問題の答え合わせ

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
<?php

// 配列を定義します
$numbers = [34, 7, 23, 32, 5, 62];

// 元の配列を表示
echo "元の配列:" . PHP_EOL;
print_r($numbers);

// sort関数を使って配列を昇順に並び替えます
sort($numbers);
echo PHP_EOL . "昇順に並び替えた配列 (sort):" . PHP_EOL;
print_r($numbers);

// rsort関数を使って配列を降順に並び替えます
rsort($numbers);
echo PHP_EOL . "降順に並び替えた配列 (rsort):" . PHP_EOL;
print_r($numbers);

// 元の配列を再定義(並び替え後の配列を初期状態に戻す)
$numbers = [34, 7, 23, 32, 5, 62];

// asort関数を使って配列を昇順に並び替えます(キーを保持)
asort($numbers);
echo PHP_EOL . "キーを保持して昇順に並び替えた配列 (asort):" . PHP_EOL;
print_r($numbers);

// arsort関数を使って配列を降順に並び替えます(キーを保持)
arsort($numbers);
echo PHP_EOL . "キーを保持して降順に並び替えた配列 (arsort):" . PHP_EOL;
print_r($numbers);

// 配列をランダムに並び替えます
shuffle($numbers);
echo PHP_EOL . "ランダムに並び替えた配列 (shuffle):" . PHP_EOL;
print_r($numbers);

// 配列を逆順に並び替えます
$reversed = array_reverse($numbers);
echo PHP_EOL . "逆順に並び替えた配列 (array_reverse):" . PHP_EOL;
print_r($reversed);
Q
正解コードの解説

コードをブロックごとに分割して解説します。

配列の定義と初期化

$numbers = [34, 7, 23, 32, 5, 62];
  • 配列 $numbers を定義します。この配列はランダムな6つの整数を持っています。
  • PHPの配列は、数値、文字列、オブジェクトなど、さまざまなデータ型を保持できる柔軟なデータ構造です。

配列の内容を表示

echo "元の配列:" . PHP_EOL;
print_r($numbers);
  • echo は文字列を出力する関数です。
  • print_r は配列やオブジェクトの内容をわかりやすい形式で出力する関数です。
  • PHP_EOL は改行を挿入します(環境に依存せず、適切な改行コードを使用します)。

配列の昇順並び替え

sort($numbers);
echo PHP_EOL . "昇順に並び替えた配列 (sort):" . PHP_EOL;
print_r($numbers);
  • sort 関数は配列の要素を昇順(小さい順)に並び替えます。
  • 並び替え後、配列のキー(インデックス)が再割り当てされます。
  • 昇順の並び替えはデータを小さい順に整理するために役立ちます。

配列の降順並び替え

rsort($numbers);
echo PHP_EOL . "降順に並び替えた配列 (rsort):" . PHP_EOL;
print_r($numbers);
  • rsort 関数は配列の要素を降順(大きい順)に並び替えます。
  • 並び替え後、キー(インデックス)が再割り当てされます。

配列の昇順並び替え(キー保持)

asort($numbers);
echo PHP_EOL . "キーを保持して昇順に並び替えた配列 (asort):" . PHP_EOL;
print_r($numbers);
  • asort 関数は、配列のキーを保持したまま要素を昇順に並び替えます。
  • 配列の順序を変更する必要があるが、キー(インデックス)をそのままにしたい場合に便利です。

配列の降順並び替え(キー保持)

arsort($numbers);
echo PHP_EOL . "キーを保持して降順に並び替えた配列 (arsort):" . PHP_EOL;
print_r($numbers);

arsort 関数は、配列のキーを保持したまま要素を降順に並び替えます。

配列をランダムに並び替え

shuffle($numbers);
echo PHP_EOL . "ランダムに並び替えた配列 (shuffle):" . PHP_EOL;
print_r($numbers);
  • shuffle 関数は配列の要素をランダムな順序に並び替えます。
  • ランダムな順序が必要な場合、例えばゲームや抽選に便利です。

配列を逆順に並び替え

$reversed = array_reverse($numbers);
echo PHP_EOL . "逆順に並び替えた配列 (array_reverse):" . PHP_EOL;
print_r($reversed);
  • array_reverse 関数は配列を逆順に並び替えます。
  • 元の配列の順序を逆にしたい場合に便利です。
もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPHP学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました