【PHP】レッスン4-06:配列を並び替えよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:配列の並び替え

この記事の練習問題を解くために必要な知識:
基礎文法・制御構造・関数(レッスン1~3)配列の基本キーが文字列の配列配列の要素の追加と削除配列の調査配列の操作配列の並び替え配列の多次元化

<<前のページ PHP記事一覧 次のページ>>

PHPの「配列の並び替え」とは

この章ではPHPにおける「配列の並び替え」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。




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

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

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

配列の並び替えとは?

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

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

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

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

配列の並び替えの使用例

昇順と降順に並び替える

$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]

キーを保持して並び替える

$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]

ランダムに並び替える

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

逆順に並び替える

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

まとめ

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

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

配列操作をマスターすることで、PHPプログラミングの幅がさらに広がります。

配列操作の練習問題:昇順・降順・ランダムに並び替えよう

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

まずランダムな整数を持つ配列を定義し、その配列を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からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント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 を出力

ヒント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):」と表示し、配列を出力するコードを書いてください。
*/

以上がこの問題の穴埋めコードです。

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



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

<?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);

正解コードの解説

今回作成したコードはPHPの配列の並び替えを学ぶためのものです。

コードの各部分をブロックごとに分けて説明します。

配列の定義と初期化

$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記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    PHPのテキスト&問題集トップへ戻る
    トップページへ戻る