PHP入門 配列関数 配列内の要素を加工する(array_map関数)

array_map関数を利用することで、配列から順に要素を取得&加工し、新たな配列を生成できます。

構文:array_map関数

array_map(callable $callback, array $array, array ・・・$arrays):array
$callback配列を加工するための関数
$array/$arrays加工対象の配列

コールバック関数(引数$callback)の条件は、以下の通りです。

  • 引数として個々の要素を受け取り($v)
  • 戻り値として加工後の値を返す
<?php
$data = [1,2,3];
$result = array_map(function($v){return $v * $v;},$data);
print_r($result);
実行結果
実行結果

この例であれば「$v * $v」で個々の要素を自乗しているので、結果の配列もすべての要素が自乗されたものになります。

複数の配列を処理する

array_map関数は、引数$arraysに複数の配列を渡すことで、複数の配列をまとめて処理することも可能です。

<?php
$data = [1,3,5,6];
$data2 = [2,7,10];

$result = array_map(
  function($v1,$v2){return $v1 * $v2;},$data, $data2);
print_r($result);
実行結果
実行結果

処理対象の配列(引数$array/$arrays)を複数列挙した場合、無名関数(引数$func)の側も「配列の数だけ引数を受け取る」必要があります。この例であれば$v1/$v2がそれです。もちろん、無名関数の中では、これらの値を元に値を得残することになります。渡す配列の要素数はお互いに異なっていても構いませんが、要素が不足した側はnull値として扱われます。この例であれば、最後の要素は「6*null(0)」で0となります。

引数$callbackをnullとした場合

引数$callbackにはnull値を渡すこともできます。その場合、array_map関数は個々の要素を配列に束ねた入れ子の配列を生成します。

<?php
$data = ['パンダ','ウサギ','コアラ'];
$data2 = ['panda','rabbit','koala'];
print_r(array_map(null,$data,$data2));
実行結果
実行結果

この記述と、foreach+分割代入を利用すれば、複数の配列をまとめて処理することも可能です。

<?php
$data = ['パンダ','ウサギ','コアラ'];
$data2 = ['panda','rabbit','koala'];
foreach (array_map(null,$data,$data2) as [$v1, $v2]){
  print "{$v1}: {$v2}<br />";
}
実行結果
実行結果