PHPのarray_mapの使い方を完全解説!初心者でもわかる配列の要素を一括変換する方法
生徒
「PHPで配列の中の数字を全部2倍にしたり、文字を全部大文字に変えたりってできますか?」
先生
「そういうときにはarray_mapという関数を使うと便利です。一つひとつ手で書かなくても、まとめて変換できますよ。」
生徒
「まとめてってどういうことですか?一個ずつforeachで書くんじゃないんですか?」
先生
「もちろんforeachでもできますが、array_mapなら1行でスマートに書けます。使い方を一緒に見てみましょう!」
1. array_map関数とは?
array_map(アレイ・マップ)は、PHPで配列の中のすべての要素に対して同じ処理をまとめて行うための関数です。
例えば、数字を全部2倍にしたり、文字を全部小文字にしたりといった処理を簡単に実現できます。
構文は次の通りです。
array_map(コールバック関数, 配列);
コールバック関数とは、呼び出される関数のことです。次のセクションでわかりやすく説明します。
2. 数字を2倍にする例
たとえば、配列に入った数字をすべて2倍にしたいときは、次のように書きます。
$numbers = [1, 2, 3, 4, 5];
$double = array_map(function($n) {
return $n * 2;
}, $numbers);
print_r($double);
実行結果:
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
function($n){ return $n * 2; } の部分が無名関数(名前のない関数)で、各要素に対して処理をしています。
3. 文字列を大文字・小文字に変換する
array_mapは、文字列の変換にもよく使われます。
PHPにはstrtoupper(全部大文字にする)やstrtolower(全部小文字にする)といった便利な関数があるので、それらと一緒に使うとシンプルに書けます。
$names = ["taro", "HANAKO", "JiRo"];
$lower = array_map("strtolower", $names);
$upper = array_map("strtoupper", $names);
print_r($lower);
print_r($upper);
出力結果:
Array
(
[0] => taro
[1] => hanako
[2] => jiro
)
Array
(
[0] => TARO
[1] => HANAKO
[2] => JIRO
)
このように、既存の関数名を文字列で渡すだけでもOKです。
4. array_mapとforeachの違い
同じ処理をforeachでもできますが、array_mapの方が関数型プログラミングに近く、一行で結果が得られるのが特徴です。
foreachで書くとこうなります:
$numbers = [1, 2, 3];
$result = [];
foreach ($numbers as $n) {
$result[] = $n * 2;
}
array_mapで書くと:
$result = array_map(function($n) { return $n * 2; }, [1, 2, 3]);
見た目がすっきりしていて、再利用性の高いコードになります。
5. 配列の中身をHTMLで表示する場合
ブログ記事やウェブ画面で表示する際に、配列の内容をHTMLタグで囲みたいときにもarray_mapは活躍します。
$items = ["コーヒー", "お茶", "水"];
$list = array_map(function($item) {
return "<li>" . $item . "</li>";
}, $items);
echo "<ul>" . implode("", $list) . "</ul>";
出力結果:
<ul><li>コーヒー</li><li>お茶</li><li>水</li></ul>
配列の各要素を加工して、HTMLのリスト形式に整形するのにも便利です。
6. 複数の配列を同時に処理する
array_mapは、複数の配列を同時に処理することもできます。たとえば2つの配列を合成するような処理も可能です。
$firstNames = ["田中", "佐藤", "鈴木"];
$lastNames = ["太郎", "花子", "一郎"];
$fullNames = array_map(function($last, $first) {
return $last . " " . $first;
}, $firstNames, $lastNames);
print_r($fullNames);
実行結果:
Array
(
[0] => 田中 太郎
[1] => 佐藤 花子
[2] => 鈴木 一郎
)
このように、array_mapは配列の要素をまとめて変更・加工したいときに非常に便利な関数です。