MENU

【PHP】Lesson4−6:配列の並び替えを基礎から実践までマスターしよう

tggaa478@yahoo.co.jp

PHPでは配列を操作するための豊富な機能が提供されています。

その中でも「配列の並び替え」は、配列内のデータを特定の順序に整列させる際に非常に役立つ機能です。

本記事では、配列の並び替え方法を基本から使用例まで詳しく解説します。

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:クラス

<<前のページ

学習記事一覧

次のページ>>

配列の並び替えとは?|sortやshuffleの役割を理解しよう

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

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

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

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

使用例で学ぶ配列の並び替え|順序変更の具体例

昇順・降順の並び替え|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を使い分けよう

$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関数の実用例

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

逆順に並び替える|array_reverseの効果と活用法

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

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

PHPの配列並び替え関数を使うことで、さまざまな用途に応じた並び替えが簡単に行えます。

特にキーを保持するかどうかや、ランダムに並び替えるかなど、目的に応じて適切な関数を選択してください。

配列操作をマスターすることで、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で利用可能な配列の並び替え機能を学びました。

特に以下の点を学びました:

  • 昇順・降順の並び替え (sortrsort)
  • キーを保持した並び替え (asortarsort)
  • ランダムな並び替え (shuffle)
  • 配列の逆順 (array_reverse)

配列の並び替えは、データを整理しやすくする重要な機能です。

実際のプログラミングではデータの検索やソートは頻繁に行われるため、この機能をしっかりマスターしておきましょう!

もっと分かりやすい学習サイトにするために

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

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

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました