カテゴリ: PHP 更新日: 2026/06/17

PHPで関数を配列に適用する方法!初心者向けarray_map・array_filterの使い方

PHP の関数を配列に適用する(array_map, array_filter)
PHP の関数を配列に適用する(array_map, array_filter)

先生と生徒の会話形式で理解しよう

生徒

「PHPで、配列の中の数字を全部2倍にしたり、特定の条件で絞り込んだりしたいんですけど、どうやるんですか?」

先生

「それなら、array_maparray_filterという便利な関数が使えますよ。関数を配列に適用する方法です。」

生徒

「なんだか難しそうですが、初心者でも使えますか?」

先生

「大丈夫です!わかりやすい例を交えて、PHPでの使い方を丁寧に説明していきますね。」

1. 配列と関数を組み合わせる(コールバック関数)とは?

1. 配列と関数を組み合わせる(コールバック関数)とは?
1. 配列と関数を組み合わせる(コールバック関数)とは?

PHPの配列(はいれつ)とは、複数の値をひとまとめにした「データの箱」のようなものです。例えば、テストの点数一覧や、ショッピングカートに入れた商品名リストなどを想像してみてください。

プログラミングをしていると、「リストにある全ての数字を10%引きにしたい」「名簿の中から特定の名前だけを探したい」といった場面によく遭遇します。これらを1つずつ手作業で計算するのは大変ですよね。

そこで役立つのが、配列の要素に対して特定の処理を自動で実行する「関数との組み合わせ」です。専門用語では「コールバック関数を適用する」と呼びますが、イメージとしては「配列という材料リストを、関数という加工マシンに通して一気に処理する」ような感覚です。

例えば、次のようなイメージで動きます。

  • array_map: 配列の全員に「同じ加工」を施して、新しいリストを作る(例:全員に「様」をつける)
  • array_filter: 配列の中から「条件に合う人」だけを選別する(例:80点以上の人だけ残す)

このように、配列と関数を組み合わせることで、複雑な繰り返し処理(ループ)を自分で書かなくても、たった一行でスマートに記述できるようになります。これができるようになると、PHPのコードが一気にプロっぽくなりますよ!

2. array_mapで配列の値を一括変換する方法

2. array_mapで配列の値を一括変換する方法
2. array_mapで配列の値を一括変換する方法

array_map(アレイ・マップ)は、配列の中にあるすべてのデータに対して「同じ処理」を一度に実行し、その結果を新しい配列として受け取ることができる非常に便利な関数です。

たとえば、料理で例えると「ジャガイモ、人参、玉ねぎ」という材料(配列)を、「皮をむく」という工程(関数)に通して、すべて「皮がむかれた状態の材料」に作り変えるようなイメージです。

プログラミング未経験の方でも分かりやすいよう、数字を2倍にするシンプルな例を見てみましょう。


// 1. どんな処理をしたいか「関数」を作る
function multiplyByTwo($num) {
    // 受け取った数字を2倍にして返す
    return $num * 2;
}

// 2. 元になる配列(データのリスト)を用意する
$numbers = [1, 2, 3, 4, 5];

// 3. array_mapを使って、配列の全要素に関数を適用する
// 第1引数に「関数名」、第2引数に「配列」を指定します
$result = array_map("multiplyByTwo", $numbers);

// 4. 結果を表示する
print_r($result);

このコードのポイントは、自分で1つずつ計算しなくても、PHPが裏側で自動的に「1番目の要素に適用、2番目の要素に適用…」と順番に処理を進めてくれる点です。これにより、データが100個、1000個と増えても、たった数行のコードで正確に一括変換が可能になります。

また、array_mapは元の配列($numbers)を書き換えるのではなく、加工後の「新しい配列」を作成して返してくれるため、元のデータを汚さずに安全に処理できるのも大きなメリットです。

3. 実行結果と仕組みの解説

3. 実行結果と仕組みの解説
3. 実行結果と仕組みの解説

前述のプログラムを実行すると、ブラウザやコンソールには次のような結果が表示されます。

through function multiplyByTwo results in [2,4,6,8,10]]

Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 10
)

実行結果を見ると、元の配列 [1, 2, 3, 4, 5] の各要素がすべて指定した通り「2倍」の数値に変換され、新しい配列として [2, 4, 6, 8, 10] が作成されているのがわかりますね。

ここで注目したいのは、配列の左側にある [0][1] という数字(添え字・インデックス)は変わっていないという点です。array_map は、データの「並び順」や「個数」を維持したまま、中身の値だけをオーダーメイドで加工してくれる特性を持っています。

プログラミング未経験の方は、「一括で処理する」という感覚を掴むのが上達の近道です。例えば、100人分のテスト結果に一律で5点の加点を行うといった作業も、この仕組みを使えば一瞬で完了します。手作業でのミスを防ぎつつ、コードの可読性(読みやすさ)も格段に向上するのが array_map の大きな魅力です。

4. array_filterで条件に合う要素だけを取り出す「データの選別」

4. array_filterで条件に合う要素だけを取り出す「データの選別」
4. array_filterで条件に合う要素だけを取り出す「データの選別」

array_filter(アレイ・フィルター)は、配列の中から特定のルール(条件)に一致するデータだけを抽出して、新しいリストを作成する関数です。

身近な例でいうと、大量のメールの中から「未読のものだけを表示する」機能や、通販サイトで「在庫ありの商品だけを絞り込む」ようなイメージです。全てのデータを加工する array_map とは違い、条件に合わないものを「ふるい」にかけて落とす役割を持っています。

プログラミング初心者の方でも分かりやすいよう、「数値のリストから偶数(2で割り切れる数)だけを取り出す」コードを見てみましょう。


// 1. 「どんな条件で残したいか」を決める関数を作る
function isEven($num) {
    // 2で割った余りが0なら「正しい(true)」と判定して残す
    return $num % 2 === 0;
}

// 2. 元になる配列(1から5までの数字)を用意
$numbers = [1, 2, 3, 4, 5];

// 3. array_filterを使って、条件に合うものだけを抽出する
// 第1引数に「配列」、第2引数に「判定用の関数名」を指定します
// ※array_mapと引数の順番が逆なので注意しましょう!
$result = array_filter($numbers, "isEven");

// 4. 結果を表示する
print_r($result);

この isEven という関数は、各要素に対して「これは残すべきデータか?」というテストを行っています。PHPが配列の値を一つずつこの関数に放り込み、関数の結果が true(正しい)になった時だけ、その値が新しい配列 $result に保存される仕組みです。

自分で foreach などの繰り返し処理と if 文を組み合わせて書くよりも、コードが短く読みやすくなるため、実務でも非常に頻繁に使われるテクニックです。

5. 実行結果を確認しよう

5. 実行結果を確認しよう
5. 実行結果を確認しよう

上記のarray_filterを実行すると、次のように表示されます。


Array
(
    [1] => 2
    [3] => 4
)

この結果から、配列の中で「偶数」である2と4だけが取り出されたことがわかります。

6. 無名関数(匿名関数)でもっとスッキリ書ける

6. 無名関数(匿名関数)でもっとスッキリ書ける
6. 無名関数(匿名関数)でもっとスッキリ書ける

PHPでは、関数に名前をつけずにその場で定義する無名関数(むめいかんすう)も使えます。コードが短くなって便利です。


$numbers = [1, 2, 3, 4, 5];

$result = array_map(function($n) {
    return $n * $n;
}, $numbers);

print_r($result);

この例では、配列のすべての要素を2乗(にじょう)して新しい配列を作っています。

7. 初心者がつまずきやすいポイントと対策

7. 初心者がつまずきやすいポイントと対策
7. 初心者がつまずきやすいポイントと対策

プログラミング初心者の方がarray_maparray_filterでよくつまずくポイントには、次のようなものがあります。

  • 関数名を文字列で指定するのが不思議に感じる
  • 引数の順番を間違える(配列が先か関数が先か)
  • 無名関数の書き方に慣れない

最初はシンプルな例から始めて、慣れてきたら条件や処理を少しずつ変えて試すのがおすすめです。

8. 練習問題で理解を深めよう

8. 練習問題で理解を深めよう
8. 練習問題で理解を深めよう

理解をより深めるために、次のような練習をしてみましょう。

  • 奇数だけを取り出すarray_filterを作る
  • 数字を3倍にするarray_mapを書いてみる
  • 無名関数と組み合わせて自分なりの変換を考えてみる

PHPのarray_maparray_filterをマスターすれば、配列操作がぐっと楽になります。関数を組み合わせる力を身につけていきましょう!

まとめ

まとめ
まとめ

PHPにおける配列処理は、初心者にとってとても重要なステップです。今回の記事では、配列の各要素に関数を適用する方法としてarray_maparray_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_filterarray_mapを組み合わせることで、複雑な処理もシンプルに実装できます。

最初は慣れないかもしれませんが、何度も書いて試すことで自然に身についていきます。PHPの配列処理を学ぶうえで、この2つの関数は避けて通れない道です。
ぜひ、自分の手でコードを書きながら、理解を深めていきましょう。

先生と生徒の振り返り会話

生徒

「PHPで配列を加工する方法って、最初は難しそうに思ってましたが、array_maparray_filterを使うと意外と簡単なんですね!」

先生

「その通りです。配列の要素に同じ処理を繰り返す場合、array_mapが役立ちますし、条件に合う要素だけ取り出したいときはarray_filterが最適です。」

生徒

「無名関数も慣れれば便利ですね。コードも短くなるし!」

先生

「ええ、特に配列の処理では、無名関数が大活躍します。実際に書きながら覚えていくと、理解も深まりますよ。」

生徒

「今度はarray_maparray_filterを組み合わせて、もっと複雑な処理にも挑戦してみます!」

先生

「それは素晴らしいですね。自分なりに色々なパターンを試すことが、実力をつける一番の近道です。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPで配列のすべての値を2倍にしたいときはどうすればいいですか?

PHPでは、array_mapという関数を使って、配列の各要素に2倍の処理を一括で適用できます。関数と配列を組み合わせて変換できます。

PHPのarray_mapとarray_filterの違いはなんですか?

array_mapは配列の全要素を変換して新しい配列を作る関数で、array_filterは条件に合う要素だけを抽出して新しい配列を作ります。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

PHP の関数の記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.5
Java&Spring記事人気No5
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.6
Java&Spring記事人気No6
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.7
Java&Spring記事人気No7
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
No.8
Java&Spring記事人気No8
Python
PythonのSeabornで美しいデータ可視化を実現する方法!初心者でもわかるグラフ作成入門