PHPで関数を配列に適用する方法!初心者向けarray_map・array_filterの使い方
生徒
「PHPで、配列の中の数字を全部2倍にしたり、特定の条件で絞り込んだりしたいんですけど、どうやるんですか?」
先生
「それなら、array_mapやarray_filterという便利な関数が使えますよ。関数を配列に適用する方法です。」
生徒
「なんだか難しそうですが、初心者でも使えますか?」
先生
「大丈夫です!わかりやすい例を交えて、PHPでの使い方を丁寧に説明していきますね。」
1. 配列と関数を組み合わせるってどういうこと?
PHPの配列(はいれつ)とは、複数の値をまとめて扱うためのデータの集まりです。たとえば、数字のリストや名前の一覧などです。
そして、その配列の1つ1つの要素に対して「決まった処理を全部に適用する」ために使うのが、array_mapやarray_filterという関数です。
これらを使えば、「配列全体を変換する」「特定の条件に合うものだけを取り出す」といった処理が簡単にできます。
2. array_mapで配列の値を変換する
array_map(アレイ・マップ)は、配列のそれぞれの要素に対して、指定した関数を適用して新しい配列を作ります。
たとえば、すべての数字を2倍にするには次のように書きます。
function multiplyByTwo($num) {
return $num * 2;
}
$numbers = [1, 2, 3, 4, 5];
$result = array_map("multiplyByTwo", $numbers);
print_r($result);
このコードでは、multiplyByTwoという関数を使って、配列$numbersのすべての要素を2倍にしています。
3. 実行結果を確認しよう
上記のプログラムをPHPで実行すると、次のような結果が表示されます。
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
元の配列の1,2,3,4,5がすべて2倍になって、2,4,6,8,10という配列になっています。
4. array_filterで条件に合う要素だけを取り出す
array_filter(アレイ・フィルター)は、配列の中から「ある条件を満たすもの」だけを取り出して、新しい配列にします。
たとえば、偶数だけを取り出すには次のように書きます。
function isEven($num) {
return $num % 2 === 0;
}
$numbers = [1, 2, 3, 4, 5];
$result = array_filter($numbers, "isEven");
print_r($result);
このコードでは、isEvenという関数で「2で割って余りが0なら偶数」と判断して、その値だけを残しています。
5. 実行結果を確認しよう
上記のarray_filterを実行すると、次のように表示されます。
Array
(
[1] => 2
[3] => 4
)
この結果から、配列の中で「偶数」である2と4だけが取り出されたことがわかります。
6. 無名関数(匿名関数)でもっとスッキリ書ける
PHPでは、関数に名前をつけずにその場で定義する無名関数(むめいかんすう)も使えます。コードが短くなって便利です。
$numbers = [1, 2, 3, 4, 5];
$result = array_map(function($n) {
return $n * $n;
}, $numbers);
print_r($result);
この例では、配列のすべての要素を2乗(にじょう)して新しい配列を作っています。
7. 初心者がつまずきやすいポイントと対策
プログラミング初心者の方がarray_mapやarray_filterでよくつまずくポイントには、次のようなものがあります。
- 関数名を文字列で指定するのが不思議に感じる
- 引数の順番を間違える(配列が先か関数が先か)
- 無名関数の書き方に慣れない
最初はシンプルな例から始めて、慣れてきたら条件や処理を少しずつ変えて試すのがおすすめです。
8. 練習問題で理解を深めよう
理解をより深めるために、次のような練習をしてみましょう。
- 奇数だけを取り出す
array_filterを作る - 数字を3倍にする
array_mapを書いてみる - 無名関数と組み合わせて自分なりの変換を考えてみる
PHPのarray_mapやarray_filterをマスターすれば、配列操作がぐっと楽になります。関数を組み合わせる力を身につけていきましょう!
まとめ
PHPにおける配列処理は、初心者にとってとても重要なステップです。今回の記事では、配列の各要素に関数を適用する方法としてarray_mapとarray_filterの使い方を紹介しました。
array_mapは、配列のすべての値を一括で変換するのに便利で、array_filterは条件に合う要素だけを取り出す際に活躍します。
また、関数名を直接渡す方法や、より柔軟な記述ができる無名関数についても学びました。無名関数を使えば、コードの見通しが良くなり、短く書ける利点があります。
PHPでは、こうした関数型の考え方を取り入れることで、効率的で読みやすいプログラムが書けるようになります。初心者でも、小さな関数を作り、それを配列に適用して加工する練習を繰り返せば、自然と応用力が身についてきます。
たとえば、次のように記述すれば、偶数だけを取り出して2倍にするような処理もスッキリ書けます。
$numbers = [1, 2, 3, 4, 5, 6];
$filtered = array_filter($numbers, function($n) {
return $n % 2 === 0;
});
$doubled = array_map(function($n) {
return $n * 2;
}, $filtered);
print_r($doubled);
このようにarray_filterとarray_mapを組み合わせることで、複雑な処理もシンプルに実装できます。最初は慣れないかもしれませんが、何度も書いて試すことで自然に身についていきます。PHPの配列処理を学ぶうえで、この2つの関数は避けて通れない道です。
ぜひ、自分の手でコードを書きながら、理解を深めていきましょう。
生徒
「PHPで配列を加工する方法って、最初は難しそうに思ってましたが、array_mapやarray_filterを使うと意外と簡単なんですね!」
先生
「その通りです。配列の要素に同じ処理を繰り返す場合、array_mapが役立ちますし、条件に合う要素だけ取り出したいときはarray_filterが最適です。」
生徒
「無名関数も慣れれば便利ですね。コードも短くなるし!」
先生
「ええ、特に配列の処理では、無名関数が大活躍します。実際に書きながら覚えていくと、理解も深まりますよ。」
生徒
「今度はarray_mapとarray_filterを組み合わせて、もっと複雑な処理にも挑戦してみます!」
先生
「それは素晴らしいですね。自分なりに色々なパターンを試すことが、実力をつける一番の近道です。」