日曜プログラミング

PHP好き集まれ〜!!

array_walk(),array_map(),array_filter()について

配列に適用させることができるコールバック関数について調べたので、まとめます。

もともとPHPにはforeach構文というものがあり、これで配列の中の値を処理することができるのですが
コールバック関数を使用しても同じ処理が出来るということで用意されています。

まずarray_walkとarray_mapです
この2つの違いを個人的に調べた範囲でまとめました。
ちなみに詳しい説明はドキュメントを見て下さい。
PHP: array_walk - Manual
PHP: array_map - Manual


・array_walk
1.返り値がbool値
2.array_walk()では第1引数に配列、第2引数にコールバック関数を指定する
3.コールバック関数の第1引数は適用させる配列の値、第2引数は配列のキーが入る
4.破壊的メソッドになりうる

・array_map
1.返り値はコールバック関数が適用された後のすべての要素を含む配列
2.array_map()では第一引数にコールバック関数、
 第2引数にコールバック関数の第1引数に適用する配列、
 第3引数は指定なしでもOKだが、コールバック関数の第2引数に指定する配列となる
3.コールバック関数の引数には適用させる配列の値が入る
4.非破壊的メソッド

試しに適当に書いてみた

<?php
//array_walk()
$arr = [1,2,3,4,5];

array_walk($arr, function(&$value, $key){
	
	$value *= 2;
	echo $key . ":" . $value . " ";
});
echo "\n";
//出力結果 
//0:2 1:4 2:6 3:8 4:10 

//array_map()
$value1 = [1,1,2,2,3];
$value2 = [0,0,1,1,2];
$value3 = [2,2,0,0,1];

$results = array_map(function($value1, $value2, $value3){
	$result = $value1 + $value2 + $value3;
	return $result;
}, $value1, $value2, $value3);
foreach($results as $value){echo $value . " ";}
echo "\n";
//出力結果
//3 3 3 3 6

次はarray_filter()をみます。
これも詳細はドキュメントを参照して頂きたいです。
PHP: array_filter - Manual

これは先ほどはarray_map()やarray_walk()ほど複雑ではないです。

特徴として

1.第1引数に配列、第2引数にコールバックを指定する
2.callback関数がtrueを返した場合の値を、結果の配列に入れる
3.返り値は結果の配列

これも適当に書いてみた。

<?php
$array = [1,2,3,4,5];
$filter = array_filter($array, function($value){
	$mod = $value % 2;
	if($mod === 0){return true;}
	if($mod === 1){return false;}
});
foreach($filter as $val){echo $val . " ";}
echo "\n";
//出力結果
//2 4

以上です。