未だに配列関数を上手に使えないので自分なりにまとめ
array_filter
コールバック関数を使用して、配列の要素をフィルタリングする
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
$callback
の関数で$array
の配列をフィルタリングし、結果がtrueの場合に$array
の現在の値が結果の配列に入る。連想配列の場合キーは保持。
※コールバック関数は真偽を返すものである必要がある
例
array_filter
function odd($num){
//奇数かどうかを返す
return($num & 1);
}
function even($num){
//偶数かどうかを返す
return(!($num & 1));
}
$arr = [1,2,3,4,5];
print_r(array_filter($arr,"odd"));
/*
Array
(
[0] => 1
[2] => 3
[4] => 5
)
*/
print_r(array_filter($arr,"even"));
/*
Array
(
[1] => 2
[3] => 4
)
*/
array_map
指定した配列の要素にコールバック関数を適用する
array array_map ( callable $callback , array $array1 [, array $... ] )
$array1
の各要素に $callback
の関数を適用した後、 その全ての要素を含む配列を返す。array_map
に渡される配列の数と、$callback
が受け付けるパラメータの数は一致している必要がある。
2つ以上の配列を使う時、配列の長さは等しい必要がある。
もし長さが違った場合は、短い方を空の要素で埋めて、長い方に合わせる。
例
array_map
function en($n,$m){
return ($n."は英語で【".$m."】です。");
}
function fr($n,$m){
return ($n."はフランス語で【".$m."】です。");
}
$arr1 = [1,2,3,4,5,6];
$arr2 = ["one","two","three","four","five","six"];
$arr3 = ["un","deux","trois","quatre","cinq"];
print_r(array_map("en",$arr1,$arr2));
/*
Array
(
[0] => 1は英語で【one】です。
[1] => 2は英語で【two】です。
[2] => 3は英語で【three】です。
[3] => 4は英語で【four】です。
[4] => 5は英語で【five】です。
[5] => 6は英語で【six】です。
)
*/
print_r(array_map("fr",$arr1,$arr3));
/*
Array
(
[0] => 1はフランス語で【un】です。
[1] => 2はフランス語で【deux】です。
[2] => 3はフランス語で【trois】です。
[3] => 4はフランス語で【quatre】です。
[4] => 5はフランス語で【cinq】です。
[5] => 6はフランス語で【】です。//$arr3の要素は5つしかないので【】の中は空になる
)
*/
配列の配列を生成
コールバック関数の名前としてNULLを用いることで配列の配列を構築することができる1
array_map
print_r(array_map(null,$arr1,$arr2,$arr3));
/*
Array
(
[0] => Array
(
[0] => 1
[1] => one
[2] => un
)
[1] => Array
(
[0] => 2
[1] => two
[2] => deux
)
[2] => Array
(
[0] => 3
[1] => three
[2] => trois
)
[3] => Array
(
[0] => 4
[1] => four
[2] => quatre
)
[4] => Array
(
[0] => 5
[1] => five
[2] => cinq
)
[5] => Array
(
[0] => 6
[1] => six
[2] =>
)
)
*/
array_merge
ひとつまたは複数の配列をマージする
array array_merge ( array $array1 [, array $... ] )
キーが同じ文字列の場合は後ろの値2で上書き 。
キーが数字の場合は0から振りなおされて値は追記される。
例
array_merge
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
[color] => Array
(
[favorite] => green //$ar1["color"]["favorite"]の"red"が上書きされてなくなる
[0] => blue //$ar2["color"][0]の値が追記
)
[0] => 5 //$ar1[0]
[1] => 10 //$ar2[0]
)
*/
array_merge_recursive
二つ以上の配列を再帰的にマージする
array array_merge_recursive ( array $array1 [, array $... ] )
キーが同じ文字列の場合は一つの配列にまとめられる。
キーが数字の場合は0から振りなおされて値は追記される。
例
array_merge_recursive
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
[color] => Array
(
[favorite] => Array
(
[0] => red //$ar1["color"]["favorite"]
[1] => green //$ar2["color"]["favorite"]
)
[0] => blue //$ar2["color"][0]
)
[0] => 5 //$ar1[0]
[1] => 10 //$ar2[0]
)
*/