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 />";
}