PHPの配列のすべての要素に対して、同じ処理を一括で適用したいと思ったことはありませんか?そんな時に活用できるのがarray_mapです。例えば配列の要素すべての値を2倍にしたい場合、array_mapを使用すると配列の要素の値すべてを簡単に2倍にすることができます。array_mapを覚えて実際につかってみましょう。

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

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


function multiple_number( $number ){

     return $number*2;

}

上記の関数multipel_numberは、引数$numberに2を入れると2倍され、4を戻してくれます。つぎに配列を準備します。


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

array_map関数で上記のmultiple_number関数を使うと配列のすべての要素に対して個別にmultiple_numberを適用して、すべての要素の値を2倍にすることができます。つまり、準備した$numbers = [1, 2, 3, 4, 5]にarray_map実行した結果,配列は [2, 3, 6, 8 ,10]にすることができます。

array_mapの書式は下記のように最初の引数にコールバック関数、次の引数に配列を記述します。与えた配列のすべての要素にコールバック関数を適用します。

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

上記の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倍になった全要素を確認することができます。上記の処理はforeachでも実行することは可能ですが、array_mapを利用すると簡単に配列の全要素に同じ処理を行うプログラムを作成することができます。


$ php array_map.php
array(5) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
  [3]=>
  int(8)
  [4]=>
  int(10)
}

コールバック関数に無名関数を入れて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が持っているさまざまな関数を使いこなせれば、他人が作成したコードを見たときにも簡単に理解することができます