配列の要素にコールバック関数を適用するPHPの関数

配列を扱うにあたって、すべての要素に特定の関数を適用したいケースがあります。PHPには、配列のすべての要素にコールバック関数を適用するarray_walk(), array_map(), array_filter()といった関数が定義されており、これらの関数を利用することで処理を簡潔に記述することができます。

配列の要素にコールバック関数を適用する array_walk()

array_walk()は、第1引数で渡した配列の各要素に第2引数のコールバック関数を適用します。第3引数はオプションで、コールバック関数に渡したい追加のパラメータを指定することができます。コールバック関数には、第1引数で配列の値、第2引数で配列のキー、第3引数にはarray_walk()の第3引数で指定された追加のパラメータが渡されます。

PHP

<?php
function test($value, $key, $add_arg)
{
  echo $add_arg . '[' . $key . '] : ' . $value, PHP_EOL;
}
$array = array('foo' => 'a', 'b', 'hoge' => 'c');
array_walk($array, 'test', 'array');
/* 出力:
array[foo] : a
array[0] : b
array[hoge] : c
*/
?>

配列の要素にコールバック関数を適用し、結果を配列で返す array_map()

array_map()は、第2引数以降で渡された配列の各要素を引数として第1引数のコールバック関数を呼び出し、結果を配列で返します。コールバック関数で受け取る引数の数は、array_map()の第2引数以降の配列の数と同じである必要があります。下記の例では、2つの配列の各インデックスにおける平均値を求めています。

PHP

<?php
function average($arg1, $arg2)
{
  return ($arg1 + $arg2) / 2;
}
$array1 = array(8, 3, 5);
$array2 = array(6, 7, 7);
$result = array_map('average', $array1, $array2);
print_r($result);
/* 出力:
Array
(
  [0] => 7
  [1] => 5
  [2] => 6
)
*/
?>

コールバック関数で配列の要素をフィルタリングする array_filter()

array_filter()は、第1引数の配列の各要素を第2引数のコールバック関数でフィルタリングし、結果を配列で返します。返される配列は、元の配列のキーを維持しています。コールバック関数は、渡された引数に応じてBool値を返す必要があります。

PHP

<?php
function is_even($arg)
{
  return ($arg % 2 === 0);
}
$array = array(1, 2, 3, 4, 5);
$result = array_filter($array, 'is_even');
print_r($result);
/* 出力:
Array
(
  [1] => 2
  [3] => 4
)
*/
?>