【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
)

$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
)

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位は山本君
)

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
)

ただし、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
)

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
)

以上、array_mapの使い方をサンプルコードで紹介、でした。

PHP