[PHP] array_mapのサンプルを作ってみる



Nプログラマ(@Nprog128)です。

今回は、array_mapの使って色々とサンプルを作ってみます。

基本

1array_map ( callable $callback , array $array1 [, array $… ] ) : array

最近知ったのですが、第2引数以降は可変リストなんですね。
配列は1コしか渡せないと思いこんでいました。

なプ

マニュアルをよく確認しないと行けないッスね。

基本コード

基本 コードを開く
基本
 1<?php
 2
 3$numbers = [10, 20, 30];
 4
 5array_map(
 6    function ($value) {
 7        echo $value, "\n";
 8    },
 9    $numbers
10);
11

第1引数には、配列に対する処理を行う関数を渡します。

第2引数には、第1引数の関数に渡す配列を渡します。
配列の個数は任意の数を渡せますが、任意の個数と、第1引数の関数が取る引数の個数が一致する必要があります。

サンプル1: 自分で定義した関数を渡す

自分でcountUp関数を定義して、それをarray_map関数に渡すというサンプルを作ってみました。

サンプル1 コードを開く
サンプル1
 1// x1に1を加算した結果を返す
 2function countUp($x1)
 3{
 4    return $x1 + 1;
 5}
 6
 7$data = [1, 2, 3];
 8
 9// ユーザ定義関数を渡す
10$result = array_map('countUp', $data);
11var_dump($result);
結果 を開く
結果
1array(3) {
2   [0]=> int(2)
3   [1]=> int(3)
4   [2]=> int(4)
5}

$dataの要素にそれぞれ+1された結果の配列が$resultに返ってきました。

サンプル2: PHPのビルトイン関数を渡す

strval関数の名前を渡して、配列の要素を文字列にするサンプルを作ってみました。

サンプル2 コードを開く
サンプル2
1$data = [1, 2, 3];
2
3// ビルトイン関数(strval)を渡して文字列の配列にする
4$result = array_map('strval', $data);
5var_dump($result);
結果 を開く
結果
1array(3) {
2   [0]=> string(1) "1"
3   [1]=> string(1) "2"
4   [2]=> string(1) "3"
5}

先程はint型の配列だったのが、string型の配列になっていることが確認できました。

ビルトイン関数について

ネットで調べてみると組み込み関数標準関数とかもありますが、マニュアルに合わせて内部関数(ビルトイン関数)とします。

内部(ビルトイン)関数 より引用

サンプル3: 配列を2個渡す

なプ

実は最近コレを知った。。。

次は第2引数の可変リストに配列を2つ渡すサンプルを作ってみます。

関数の処理は、$dataに入っている要素を$exp_arrayの要素でそれぞれべき乗するという内容になります。

1(ちょっと分かりづらいので、先に下の表(テーブル)を見ていただければどのような動作か分かると思います)

配列要素に対するべき乗の処理を表にすると、こんな感じになります。

$data $exp_array powの結果
1 2 1
2 4 16
3 6 729
サンプル3 コードを開く
サンプル3
 1$data = [1, 2, 3];
 2// 要素を乗数する数(1を2乗、2を4乗、3を6乗)
 3$exp_array = [2, 4, 6];
 4
 5$result = array_map(
 6    "pow",
 7    $data,
 8    $exp_array
 9);
10print_r($result);
11
結果 を開く
結果
1Array
2 (
3     [0] => 1
4     [1] => 16
5     [2] => 729
6 )

$dataの配列の要素が、べき乗された結果が確認できました。

コードの説明

pow関数について

pow関数は引数を2個取り、べき乗を返すビルトイン関数です。
単体で使うとこんな感じになります。

1pow(2, 4);  // 2の4乗なので16が返ってくる

callableの引数について

マニュアルにある callableに渡す関数の引数は、pow関数が取る引数の個数(2個)と、可変リストに渡す配列の個数($data, $exp_arrayの2個)が一致しているので、使用する条件もクリアしています。

おわりに

今回はarray_mapを使って色々とサンプルを作ってみました。

array_mapは処理がちょっと遅いらしいので、たくさん呼び出す時はそのへんを考慮する必要があります。

その時は、forとかforeachを使った方がいいかもしれません。

なプ

array_mapは一時変数を使わないので、つい使いたくなる。。。

ケース・バイ・ケースということで!

それでは、このへんで。
バイナリー!

参考

\ ちょっとお買い物 /


関連した記事