PHPのarray_map()
関数は、1つ又は複数の配列の全ての要素の値に、ユーザー定義関数を適用し、1つの配列として返す組み込み関数。
この関数を使うと、複数の配列を、ひとつの多次元配列にまとめたり、配列の配列を作ったりすることなどもできる。
コールバック関数を適用する配列がひとつだけの場合、キーと値の相関関係は維持される。複数の場合は、新たに数値キーを割り当てる。
定義
パラメータ
- コールバック $callback
コールバック関数。
配列要素の値に適用したいユーザー定義関数を指定する。
- 配列型 $arr1
コールバック関数を適用したい配列。
配列要素の値を、引数として、コールバック関数に渡す。
- 配列型 $…
オプション。
コールバック関数を適用したい配列は、カンマ
,
で区切り、複数指定できる。
戻り値
配列。
コールバック関数適用後の値を格納した配列。
構文
1つの配列の全ての要素の値に、ユーザー定義関数を適用
「配列」の全ての要素の値に、「コールバック関数」を適用し、配列として返す。
「配列」の要素の値を、1つ目の引数として、「コールバック関数」に渡す。
複数の配列の全ての要素の値に、ユーザー定義関数を適用
「配列1~3」の全ての配列要素の値に、「コールバック関数」を適用し、1つの配列として返す。
「配列1」の要素の値を、1つ目の引数、「配列2」の要素の値を、2つ目の引数、「配列3」の要素の値を、3つ目の引数として、「コールバック関数」に渡す。
配列の配列を生成
コールバック関数に、「NULL」を指定すると、配列の配列を作ることができる。
「配列1~3」のそれぞれの1つ目の配列要素の値を格納した配列を、「配列の配列」の1つ目の配列要素として格納。
「配列1~3」のそれぞれの2つ目の配列要素の値を格納した配列を、「配列の配列」の2つ目の配列要素として格納。
「配列1~3」のそれぞれの3つ目の配列要素の値を格納した配列を、「配列の配列」の3つ目の配列要素として格納。
1つの配列の全ての要素の値に、メソッドを適用
「配列」の全ての要素の値に、「メソッド名」のメソッドを適用し、配列として返す。
「配列」の要素の値を、1つ目の引数として、メソッドに渡す。
複数の配列の全ての要素の値に、メソッドを適用
「配列」の全ての要素の値に、「メソッド名」のメソッドを適用し、配列として返す。
「配列1」の要素の値を、1つ目の引数、「配列2」の要素の値を、2つ目の引数、「配列3」の要素の値を、3つ目の引数として、メソッドに渡す。
サンプル
配列の全ての要素の値に、ユーザー定義関数を適用
<?php
function square( $arg ) {
return $arg * $arg;
}
$varArrayA = array( 1, 2, 3, 4, 5 );
$varArrayB = array_map( "square", $varArrayA );
print_r( $varArrayB );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
)
複数の配列の全ての要素の値に、ユーザー定義関数を適用
<?php
function sample( $arg1, $arg2, $arg3 ) {
return $arg1 + $arg2 + $arg3;
}
$varArrayA = array( 1, 2, 3, 4, 5 );
$varArrayB = array( 2, 3, 4, 5, 6 );
$varArrayC = array( 3, 4, 5, 6, 7 );
$varArrayD = array_map( "sample", $varArrayA, $varArrayB, $varArrayC );
print_r( $varArrayD );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => 6
[1] => 9
[2] => 12
[3] => 15
[4] => 18
)
配列の全ての要素の値の文字列に、ユーザー定義関数を適用
<?php
function editArray( $arg ) {
return "{$arg}色";
}
$varArrayA = array( "白", "黒", "赤", "青", "緑" );
$varArrayB = array_map( "editArray", $varArrayA );
print_r( $varArrayB );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => 白色
[1] => 黒色
[2] => 赤色
[3] => 青色
[4] => 緑色
)
連想配列の全ての要素の値に、ユーザー定義関数を適用
コールバック関数を適用する配列がひとつだけの場合、キーと値の相関関係は維持されている点に注目。
<?php
function editArray( $arg1 ) {
return "{$arg1}色";
}
$varArrayA = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
$varArrayB = array_map( "editArray", $varArrayA );
print_r( $varArrayB );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[red] => 赤色
[blue] => 青色
[green] => 緑色
)
複数の連想配列の全ての要素の値に、ユーザー定義関数を適用
コールバック関数を適用する配列が複数の場合、キーと値の相関関係は維持されず、新たに数値キーを割り振っている点に注目。
<?php
function editArray( $arg1, $arg2 ) {
return "{$arg1}: {$arg2}色";
}
$varArrayA = array(
"red" => "レッド",
"blue" => "ブルー",
"green" => "グリーン"
);
$varArrayB = array(
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
$varArrayC = array_map( "editArray", $varArrayA, $varArrayB );
print_r( $varArrayC );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => レッド: 赤色
[1] => ブルー: 青色
[2] => グリーン: 緑色
)
複数の配列から、多次元配列を生成
<?php
function sample( $arg1, $arg2 ) {
return ( array( $arg1 => $arg2 ) );
}
$varArrayA = array( "Red", "Blue", "Green" );
$varArrayB = array( "赤", "青", "緑" );
$varArrayC = array_map( "sample", $varArrayA, $varArrayB );
print_r( $varArrayC );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => Array
(
[Red] => 赤
)
[1] => Array
(
[Blue] => 青
)
[2] => Array
(
[Green] => 緑
)
)
配列の配列を生成
コールバック関数に、「NULL」を指定すると、配列の配列を作ることができる。
<?php
$varArrayA = array( "Red", "Blue", "Green" );
$varArrayB = array( "レッド", "ブル-", "グリーン" );
$varArrayC = array( "赤", "青", "緑" );
$varArrayD = array_map( NULL, $varArrayA, $varArrayB, $varArrayC );
print_r( $varArrayD );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => Array
(
[0] => Red
[1] => レッド
[2] => 赤
)
[1] => Array
(
[0] => Blue
[1] => ブル-
[2] => 青
)
[2] => Array
(
[0] => Green
[1] => グリーン
[2] => 緑
)
)
1つの配列の全ての要素の値に、メソッドを適用
<?php
class sample
{
function cube( $arg ) {
return $arg * $arg * $arg;
}
}
$varArrayA = array( 1, 2, 3, 4, 5 );
$varArrayB = array_map( array( "sample", "cube" ), $varArrayA );
print_r( $varArrayB );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
複数の配列の全ての要素の値に、メソッドを適用
<?php
class sample
{
function color( $arg1, $arg2 ) {
return "{$arg1}: {$arg2}";
}
}
$varArrayA = array( "RED", "BLUE", "GREEN" );
$varArrayB = array( "赤", "青", "緑" );
$varArrayC = array_map( array( "sample", "color" ), $varArrayA, $varArrayB );
print_r( $varArrayC );
?>
</pre>
↓↓↓出力結果↓↓↓
(
[0] => RED: 赤
[1] => BLUE: 青
[2] => GREEN: 緑
)