【PHP】Lesson4-5:foreachとarray_mapで配列を自在に操作しよう

配列の操作は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:クラス編
配列操作の基本|foreachやmap関数の全体像を理解しよう

配列操作とは、配列内の要素を処理するための技術を指します。
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の組み合わせ活用例
以下は、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乗しています。
こうした操作を組み合わせることで複雑なデータ処理が可能になります。
配列操作のまとめ|foreach・map・filterの違いを押さえよう
配列の操作は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【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)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
を出力し、改行
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?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行ずつ出力 }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
配列の初期化
$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プログラミングの理解が深まります。
ぜひ、このコードを改造して独自のアイデアを試してみてください!