【PHP】array_mapの使い方をサンプルコードで紹介
PHPの配列から、様々な処理を施して別の配列を生成するarray_map関数の解説をサンプルコードで解説します。
array_mapは、配列の値に関数処理を加えて新しい配列を生成する関数
array_mapは、配列の値に関数処理を加えて、戻り値を元に新たな配列を生成する関数です。
第一引数に関数を、第二引数以降に対象の配列を設定します。配列は複数指定できます。(後述)
サンプルコード
$aryHoge = [1, 2, 3, 4, 5]; //値をすべて2倍にする関数 function testFunc1($no){ return $no * 2; } $aryFuga = array_map('testFunc1', $aryHoge); print_r($aryFuga);
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
$aryHogeの値が2倍になった$aryFugaが新たに生成されました。
array_mapは、無名関数でも実行できる
事前に関数を用意しなくても、無名関数でもarray_mapは実行できます。(PHP5.3から)
サンプルコード
$aryHoge = [1, 2, 3, 4, 5]; $aryFuga = array_map(function($no){ return $no * 2; }, $aryHoge); print_r($aryFuga);
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
array_mapは、複数の配列を指定できる
array_mapは、第二引数以降にも配列を指定し、それぞれの配列の値を取り出すことが出来ます。
第一引数の関数には、指定した配列の数だけ引数を増やす必要があります。
サンプルコード
$aryHoge = [1, 2, 3, 4, 5]; $aryPiyo = ['田中', '佐藤', '市川', '高橋', '山本']; function testFunc2($no, $human){ return $no . '位は' . $human . '君'; } $aryFuga = array_map('testFunc2', $aryHoge, $aryPiyo); print_r($aryFuga);
Array
(
[0] => 1位は田中君
[1] => 2位は佐藤君
[2] => 3位は市川君
[3] => 4位は高橋君
[4] => 5位は山本君
)
(
[0] => 1位は田中君
[1] => 2位は佐藤君
[2] => 3位は市川君
[3] => 4位は高橋君
[4] => 5位は山本君
)
array_mapは、連想配列でも実行できる
array_mapは連想配列にも対応しており、キーを維持したまま配列を新たに作ることが出来ます。
サンプルコード
$aryHoge = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5]; function testFunc3($no){ return $no * 2; } $aryFuga = array_map('testFunc3', $aryHoge); print_r($aryFuga);
Array
(
[one] => 2
[two] => 4
[three] => 6
[four] => 8
[five] => 10
)
(
[one] => 2
[two] => 4
[three] => 6
[four] => 8
[five] => 10
)
ただし、array_mapのみでは、関数内でキーの取得ができないので、キーを絡めた関数内の処理が必要な場合は工夫が必要です。
複数の配列を指定できることを利用し、キーだけ取り出すarray_keys、値だけ取り出すarray_valuesなどの関数を複合して使えば取得できます。
サンプルコード
$aryHoge = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5]; function testFunc4($key, $value){ return $key . 'は' . $value; } $aryFuga = array_map('testFunc4', array_keys($aryHoge), array_values($aryHoge)); print_r($aryFuga);
Array
(
[0] => oneは1
[1] => twoは2
[2] => threeは3
[3] => fourは4
[4] => fiveは5
)
(
[0] => oneは1
[1] => twoは2
[2] => threeは3
[3] => fourは4
[4] => fiveは5
)
array_mapとforeachの違い
array_mapと近い処理としてforeachが挙げられます。
どちらも配列全体に対して何かを行うものですが、それぞれ目的が違います。
- array_mapは新しい配列を代入する
- foreachは配列をループさせる
ただしforeachはループ処理という自由さがあり、array_mapができたことはforeachでも基本できます。
サンプルコード
$aryHoge = [1, 2, 3, 4, 5]; $aryFuga = []; foreach($aryHoge as $key => $value){ $aryFuga[$key] = $value * 2; } print_r($aryFuga);
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
以上、array_mapの使い方をサンプルコードで紹介、でした。
ディスカッション
コメント一覧
まだ、コメントがありません