この記事で学べる知識:配列の操作
この記事の練習問題を解くために必要な知識:
基礎文法・制御構造・関数(レッスン1~3)、配列の基本、キーが文字列の配列、配列の要素の追加と削除、配列の調査、配列の操作、配列の並び替え、配列の多次元化
<<前のページ | PHP記事一覧 |
次のページ>> |
PHPの「配列の操作」とは
この章ではPHPにおける「配列の操作」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。
配列の操作はPHPにおける重要なデータ処理技術です。
多くの場面で配列内のデータを加工したり、新たな配列を生成する必要があります。
本記事では配列操作の基礎から応用例までを解説します。
配列操作の基礎
配列操作とは、配列内の要素を処理するための技術を指します。
PHPでは繰り返し処理や組み込み関数を使って、配列の内容を操作したり、新しい配列を生成できます。
代表的な方法として、foreach
ループやarray_map
、array_filter
関数があります。
foreachを使った配列のループ処理
foreach
ループを使うと、配列内のすべての要素を順に処理できます。
構文は以下の通りです。
foreach ($array as $value) { // 処理内容 }
以下は配列の各要素を出力する例です。
$array = [1, 2, 3, 4, 5]; foreach ($array as $value) { echo $value . PHP_EOL; // 各要素を改行付きで表示 }
$array
の各要素が順番に$value
に代入され、ループ内で使用できます。
また、キーと値の両方を取得したい場合は次のように記述します。
foreach ($array as $key => $value) { echo "Key: $key, Value: $value" . PHP_EOL; }
array_mapとarray_filter
array_map
array_map
は配列の各要素に対して関数を適用し、新しい配列を返します。
array_map(関数, 配列);
使用例は以下の通りです。
$array = [1, 2, 3, 4, 5]; $squaredArray = array_map(function($num) { return $num * $num; }, $array); print_r($squaredArray); // [1, 4, 9, 16, 25]
array_map
を使用することで、配列の要素を一括変換できます。
この例では、各要素が2乗されています。
array_filter
array_filter
は配列の各要素を条件に基づいてフィルタリングします。
array_filter(配列, 関数);
使用例は以下の通りです。
$array = [1, 2, 3, 4, 5]; $filteredArray = array_filter($array, function($num) { return $num % 2 === 0; // 偶数のみ抽出 }); print_r($filteredArray); // [2, 4]
array_filter
は配列から特定の条件を満たす要素だけを残すために使います。
この例では偶数だけを抽出しています。
配列操作の活用例
以下は、foreach
とarray_map
、array_filter
を組み合わせた実践的な例です。
$array = [1, 2, 3, 4, 5]; // 偶数の2乗を計算して新しい配列を生成 $result = array_map(function($num) { return $num * $num; }, array_filter($array, function($num) { return $num % 2 === 0; // 偶数のみ })); print_r($result); // [4, 16]
このコードでは、最初にarray_filter
で偶数を抽出し、その後array_map
で各要素を2乗しています。
こうした操作を組み合わせることで複雑なデータ処理が可能になります。
まとめ
配列の操作はPHPの基本的なスキルであり、データ処理を効率的に行うための鍵です。
foreach
ループによる繰り返し処理、array_map
による変換、array_filter
によるフィルタリングを組み合わせて、さまざまな場面で活用してください。
配列操作の練習問題:配列の数値を加工してみよう
この練習では、PHPの配列操作を学びます。
- 配列内のすべての要素を順に処理する
- 配列の要素を加工して新しい配列を作成する
- 条件を満たす要素を抽出する
以下の要件を満たすプログラムを作成してください。
この問題の要件
以下の要件に従ってコードを完成させてください。
$numbers
という配列を宣言し、以下の数値を格納すること:1, 2, 3, 4, 5
。- 配列
$numbers
の全要素を順番に出力すること。 - 配列
$numbers
のすべての要素を2倍にし、新しい配列を作成すること。 - 配列
$numbers
から偶数のみを抽出し、新しい配列を作成すること。 - 抽出した偶数を2倍にした結果を新しい配列として作成すること。
- 作成した配列は、1行ずつ各要素を表示すること。
- 上記操作では以下のPHP文法を使用すること:
foreach
、array_map
、array_filter
。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
配列の各要素を出力します: 1 2 3 4 5 配列の各要素を2倍にします: 2倍にした配列: 2 4 6 8 10 配列から偶数のみを抽出します: 抽出した偶数: 2 4 偶数を2倍にした新しい配列を作成します: 新しい配列: 4 8
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:配列$numbers
を初期化し、要素として[1, 2, 3, 4, 5]
を代入
2:「配列の各要素を出力します:」を出力
3:foreachループで配列$numbers
の各要素を変数$num
に代入して繰り返し処理
□ 変数$num
を出力し、改行
4:「配列の各要素を2倍にします:」を出力
5:array_map関数を使用して配列内の各要素を2倍にし、結果を新しい配列$doubled
に格納
□ 無名関数内で各要素を2倍に計算し、返す
6:「2倍にした配列:」を出力
7:foreachループで配列$doubled
の各要素を変数$value
に代入して繰り返し処理
□ 変数$value
を出力し、改行
8:「配列から偶数のみを抽出します:」を出力
9:array_filter関数を使用して配列$numbers
から偶数のみを抽出し、新しい配列$evenNumbers
に格納
□ 無名関数内で偶数かどうかを判定し、真の場合はその要素を返す
10:「抽出した偶数:」を出力
11:foreachループで配列$evenNumbers
の各要素を変数$value
に代入して繰り返し処理
□ 変数$value
を出力し、改行
12:「偶数を2倍にした新しい配列を作成します:」を出力
13:array_map関数とarray_filter関数を組み合わせて、偶数を2倍にした新しい配列$processed
を作成
□ array_filter関数で配列$numbers
から偶数を抽出
□ 無名関数内で抽出された偶数を2倍に計算し、返す
14:「新しい配列:」を出力
15:foreachループで配列$processed
の各要素を変数$value
に代入して繰り返し処理
□ 変数$value
を出力し、改行
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?php // 配列の初期化 $numbers = [1, 2, 3, 4, 5]; // 数字が入った配列を作成します // 1. foreachループで配列の各要素を出力する echo "配列の各要素を出力します:" . PHP_EOL; /* 【穴埋め問題1】ここでforeachループを使って配列$numbersの各要素を出力してください。 */ // 2. array_mapを使って、配列内の数値を2倍にする echo "配列の各要素を2倍にします:" . PHP_EOL; /* 【穴埋め問題2】ここでarray_map関数を使用して配列内の数値を2倍にし、新しい配列を作成してください。 */ // 3. array_filterを使って、偶数のみを抽出する echo "配列から偶数のみを抽出します:" . PHP_EOL; /* 【穴埋め問題3】ここでarray_filter関数を使い、偶数のみを抽出した新しい配列を作成してください。 */ // 4. 配列を加工して新しい配列を作成 echo "偶数を2倍にした新しい配列を作成します:" . PHP_EOL; /* 【穴埋め問題4】ここでarray_mapとarray_filterを組み合わせて、偶数を2倍にした新しい配列を作成してください。 */
以上がこの問題の穴埋めコードです。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
<?php // 配列の初期化 $numbers = [1, 2, 3, 4, 5]; // 数字が入った配列を作成します // 1. foreachループで配列の各要素を出力する echo "配列の各要素を出力します:" . PHP_EOL; foreach ($numbers as $num) { echo $num . PHP_EOL; // 配列内の各数字を出力 } // 2. array_mapを使って、配列内の数値を2倍にする echo "配列の各要素を2倍にします:" . PHP_EOL; $doubled = array_map(function ($num) { return $num * 2; // 各要素を2倍にする }, $numbers); echo "2倍にした配列:" . PHP_EOL; foreach ($doubled as $value) { echo $value . PHP_EOL; // 配列の各要素を1行ずつ出力 } // 3. array_filterを使って、偶数のみを抽出する echo "配列から偶数のみを抽出します:" . PHP_EOL; $evenNumbers = array_filter($numbers, function ($num) { return $num % 2 === 0; // 偶数かどうかを判定 }); echo "抽出した偶数:" . PHP_EOL; foreach ($evenNumbers as $value) { echo $value . PHP_EOL; // 抽出された偶数を1行ずつ出力 } // 4. 配列を加工して新しい配列を作成 echo "偶数を2倍にした新しい配列を作成します:" . PHP_EOL; $processed = array_map(function ($num) { return $num * 2; // 2倍にする }, array_filter($numbers, function ($num) { return $num % 2 === 0; // 偶数のみ抽出 })); echo "新しい配列:" . PHP_EOL; foreach ($processed as $value) { echo $value . PHP_EOL; // 結果を1行ずつ出力 }
正解コードの解説
今回作成したコードではPHPの配列操作について学ぶことができます。
このコードの内容をブロックごとに解説しながら、配列の操作を詳しく説明します。
配列の初期化
$numbers = [1, 2, 3, 4, 5];
- 配列
$numbers
を作成し、1から5の数値を格納しています。 - 配列とは複数の値をまとめて扱えるデータ構造です。ここでは、数値を順番に保存しています。
配列の各要素を出力する
echo "配列の各要素を出力します:" . PHP_EOL; foreach ($numbers as $num) { echo $num . PHP_EOL; }
foreach
ループを使って、配列$numbers
の要素を順に処理しています。foreach
は配列のすべての要素にアクセスするときに便利です。
$numbers as $num
の部分で、配列$numbers
の各要素が$num
に代入されます。echo
は画面に文字を出力するための関数です。
配列の要素を加工して新しい配列を作成する
$doubled = array_map(function ($num) { return $num * 2; }, $numbers);
array_map
関数を使って、配列の各要素を加工しています。- ここでは無名関数(
function ($num)
)を使って各要素を2倍にしています。 - 新しい配列
$doubled
に、加工された結果が保存されます。
加工した配列を出力する
echo "2倍にした配列:" . PHP_EOL; foreach ($doubled as $value) { echo $value . PHP_EOL; }
- 配列
$doubled
をforeach
ループで出力しています。 - 配列の要素を1行ずつ表示することで、加工結果が確認できます。
配列から条件に合う要素を抽出する
$evenNumbers = array_filter($numbers, function ($num) { return $num % 2 === 0; });
array_filter
関数を使って、条件に合う要素(偶数)を抽出しています。- 無名関数(
function ($num)
)で、「$num
が偶数かどうか」を判定し、偶数のみを抽出しています。
抽出した偶数を出力する
echo "抽出した偶数:" . PHP_EOL; foreach ($evenNumbers as $value) { echo $value . PHP_EOL; }
配列 $evenNumbers
に格納された偶数を foreach
ループで出力しています。
条件を満たす要素を加工して新しい配列を作成する
$processed = array_map(function ($num) { return $num * 2; }, array_filter($numbers, function ($num) { return $num % 2 === 0; }));
- まず
array_filter
を使って偶数のみを抽出しています。 - その後、
array_map
を使って偶数を2倍に加工しています。 - 新しい配列
$processed
に加工結果が保存されます。
加工結果を出力する
echo "新しい配列:" . PHP_EOL; foreach ($processed as $value) { echo $value . PHP_EOL; }
- 最終的な加工結果を
foreach
ループで出力しています。 - これにより抽出された偶数を2倍にした結果を確認できます。
まとめ
このプログラムでは、PHPの配列操作を実践的に学べます。特に次の点が重要です:
foreach
ループ を使った配列の要素の順次処理。array_map
を使った配列の要素の加工。array_filter
を使った配列の条件によるフィルタリング。
配列操作はデータを効率的に扱うための基本スキルです。
これらを繰り返し練習することで、PHPプログラミングの理解が深まります。
ぜひ、このコードを改造して独自のアイデアを試してみてください!
<<前のページ |
PHP記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。