PHPの配列のすべての要素に対して同じ処理を一括で適用したいと思ったことはありませんか?そんな時に活用できるのがarray_mapです。

例えば配列の要素すべての値を2倍にしたい場合、array_mapを利用すると短いコードで配列の要素をすべて2倍にすることができます。

配列に対して何か処理をしたいと思った時にはすぐにforeachを使ってしまう人も多いかと思います。array_mapも理解してさまざまな場所で利用し効率よくコードを記述しましょう。

array_map関数を利用して配列のすべての要素を2倍に

まず引数に数字を与えると2倍になって値を返してくれる関数を作成します。


function multiple_number( $number ){

     return $number*2;

}

上記の関数multiple_numberは、引数$numberに2を入れると入れた数字2を2倍にし4を戻してくれます。単純に引数を2倍にして戻す関数です。

つぎに5つの数字で構成された配列を準備します。


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

array_map関数を利用するための関数と配列が準備できたので、array_mapの書式を確認します。

array_map関数の書式

array_map関数の書式

コールバック関数は、別の関数の引数として渡す関数のことをいいます
fukidashi

書式が確認できたので、もう一度実行したいことを思い出しましょう。

配列の要素のすべての値を2倍にする

上記のarray_mapの書式を参考にコールバック関数にmultiple_number関数、配列に$numbersを入れることでarray_mapを実行してみましょう


function multiple_number( $number ){

     return $number*2;

}

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

$multiple_numbers = array_map('multiple_number', $numbers);

var_dump($multiple_numbers);

実行結果をvar_dumpで表示させると以下のように2倍になった全要素を確認することができます。


$ php array_map.php
array(5) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
  [3]=>
  int(8)
  [4]=>
  int(10)
}
上記の処理はforeachでも実行することは可能ですが、array_mapを利用すると簡単に配列の全要素に同じ処理を行うプログラムを作成することができます。
fukidashi

用意した関数と配列、array_map関数の書式と実行結果から配列$numbersに入った値が先頭から順番に取り出され、値一つ一つがmultiple_number関数を使って2倍にされることがわかります。この配列の要素すべての値を2倍にするという動作さえ理解できればarray_mapが難しいものではないことがわかるのではないでしょうか。ポイントは配列のすべての要素に対して同じ処理を実行するです。

コールバック関数に無名関数を入れてarray_mapを実行

コールバック関数に無名関数を入れてもarray_mapを実行することができます。multiple_numberを宣言する必要がなくなるため、シンプルなコードになります。


<?php

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

$multiple_numbers = array_map(function( $number ){  
     return $number*2; 
     }, $numbers);
?>

array_mapを使用しない場合の処理

array_mapを使用しない場合は下記のようにforeachを使用して同じ処理をすることができます。


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

$multiple_numbers = [];

foreach( $numbers as $number){

     $multiple_numbers[] = $number*2;

}
?>
array_mapに限らず、PHPが持っているさまざまな関数を使いこなせれば、他人が作成したコードを見たときにも簡単に理解することができます
fukidashi

array_mapを覚えたどこかで一度コード使ってみましょう。