【PHP】レッスン4-05:配列を操作しよう

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

この記事で学べる知識:配列の操作

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

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

PHPの「配列の操作」とは

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




配列の操作はPHPにおける重要なデータ処理技術です。

多くの場面で配列内のデータを加工したり、新たな配列を生成する必要があります。

本記事では配列操作の基礎から応用例までを解説します。

配列操作の基礎

配列操作とは、配列内の要素を処理するための技術を指します。

PHPでは繰り返し処理や組み込み関数を使って、配列の内容を操作したり、新しい配列を生成できます。

代表的な方法として、foreachループやarray_maparray_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は配列から特定の条件を満たす要素だけを残すために使います。

この例では偶数だけを抽出しています。

配列操作の活用例

以下は、foreacharray_maparray_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文法を使用すること: foreacharray_maparray_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行ずつ出力
}

正解コードの解説

今回作成したコードでは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;
}
  • 配列 $doubledforeach ループで出力しています。
  • 配列の要素を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の配列操作を実践的に学べます。特に次の点が重要です:

  1. foreach ループ を使った配列の要素の順次処理。
  2. array_map を使った配列の要素の加工。
  3. array_filter を使った配列の条件によるフィルタリング。

配列操作はデータを効率的に扱うための基本スキルです。

これらを繰り返し練習することで、PHPプログラミングの理解が深まります。

ぜひ、このコードを改造して独自のアイデアを試してみてください!

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

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

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

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






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