array_reduce
array_reduce は、配列要素を集約して単一の結果を返す関数。
階層構造の再帰処理 で参考にさせていただいたソースに使われていた。
【環境】
php:5.4.7
php:5.4.7
array_reduce
mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )
配列 array の各要素に callback 関数を繰り返し適用し、 配列を一つの値に減らします。
php:array_reduce
第1引数:当該配列
第2引数:コールバック関数。無名関数可
第3引数:戻り値の初期値。省略可。省略した場合はデフォルトが null
イメージ
配列について、foreach でグルグル回す代わりに使う。
利用例
- // コールバック関数。その1
- function sum($carry, $item)
- {
- $carry += $item;
- return $carry;
- }
- // コールバック関数。その2
- function product($carry, $item)
- {
- $carry *= $item;
- return $carry;
- }
- $a = array(1, 2, 3, 4, 5);
- $x = array();
- var_dump(array_reduce($a, "sum")); // int(15)
- var_dump(array_reduce($a, "product", 10)); // int(1200), because: 10*1*2*3*4*5
- var_dump(array_reduce($x, "sum", "No data to reduce")); // string(17) "No data to reduce"
コールバック関数
関数名そのものを文字列にて渡す。
- var_dump(array_reduce($a, "sum"));
無名関数
関数名を指定するのではなく、無名関数にてその場に定義してもOK。
- var_dump(array_reduce($a, function sum($carry, $item) {
- $carry *= $item;
- return $carry;
- }
- ));
引数
$carry:戻り値。処理の間保持される
$item:配列の各要素。foreach($array as $key => $val) の $val