クロージャの使える配列関数

PHP5.3 を使っていて、無名関数が利用できるので配列操作が非常に便利になったのですが、
自前で実装するよりも、ネイティブで用意している関数を利用する方が早いので、どんなものがあるのかまとめてみた。

それにしても、array_map の挙動はキモイ……。


array_map

array_map ― 指定した配列の要素にコールバック関数を適用する
array array_map ( callback $callback , array $arr1 [, array $... ] )
array_map() は、arr1 の各要素に callback 関数を適用した後、 その全ての要素を含む配列を返します。 callback 関数が受け付けるパラメータの数は、 array_map() に渡される配列の数に一致している必要があります。

単一の配列に対するもの

array_filter ― コールバック関数を使用して、配列の要素をフィルタリングする
array array_filter ( array $input [, callback $callback ] )
callback 関数によりフィルタ処理が行われた input の全ての要素を含む配列を返します。 callback 関数が true を返した場合、 input の現在の値が結果の配列に入ります。 input が連想配列の場合、 キーは保存されます。
array_reduce ― コールバック関数を用いて配列を普通の値に変更することにより、配列を再帰的に減らす
mixed array_reduce ( array $input , callback $function [, int $initial ] )
array_reduce() は、配列 input の各要素に function 関数を繰り返し適用し、 配列を一つの値に減らします。
array_walk ― 配列の全ての要素にユーザ関数を適用する
bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )
array 配列の各要素にユーザ定義関数 funcname を適用します。
array_walk() は array の内部配列ポインタに影響されません。array_walk() はポインタの位置に関わらず配列の全てに渡って適用されます。
array_walk_recursive ― 配列の全ての要素に、ユーザー関数を再帰的に適用する
bool array_walk_recursive ( array &$input , callback $funcname [, mixed $userdata ] )
input 配列の各要素にユーザ定義関数 funcname を適用します。 この関数は配列の要素内を再帰的にたどっていきます。

配列の差分を得るもの

array_udiff ― データの比較にコールバック関数を用い、配列の差を計算する
array array_udiff ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func )
データの比較にコールバック関数を用い、配列の差を計算します。 この関数は array_diff() と異なり、 データの比較に内部関数を利用します。
array_udiff_assoc ― データの比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算する
array array_udiff_assoc ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func )
データの比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算します。
注意: この関数は n 次元配列の一つの次元しかチェックしないことに注意してください。 もちろん、array_udiff_assoc($array1[0], $array2[0], "some_comparison_func"); のようにすることでより深い次元でのチェックもできます。
array_udiff_uassoc ― データと添字の比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算する
array array_udiff_uassoc ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func , callback $key_compare_func )
データと添字の比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算します。
array_diff() や array_udiff() と異なり、キーが比較に使用されることに注意してください。
array_diff_uassoc ― ユーザが指定したコールバック関数を利用し、 追加された添字の確認を含めて配列の差を計算する
array array_diff_uassoc ( array $array1 , array $array2 [, array $... ], callback $key_compare_func )
array1 のキーを array2 のキーと比較し、その差を返します。 この関数は array_diff() に似ていますが、 配列のキーを用いて比較するという点が異なります。
array_diff_assoc() とは異なり、 内部関数ではなくユーザが指定したコールバック関数を用いて添字を比較します。
array_diff_ukey ― キーを基準にし、コールバック関数を用いて配列の差を計算する
array array_diff_ukey ( array $array1 , array $array2 [, array $ ... ], callback $key_compare_func )
array1 のキーを array2 のキーと比較し、その差を返します。 この関数は array_diff() に似ていますが、 値ではなくキーを用いて比較するという点が異なります。
array_diff_key() とは異なり、 内部関数ではなくユーザが指定したコールバック関数を用いて添字を比較します。

配列の共通項を得るもの

array_uintersect ― データの比較にコールバック関数を用い、配列の共通項を計算する
array array_uintersect ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func )
データの比較にコールバック関数を用い、配列の共通項を計算します。
array_uintersect_assoc ― データの比較にコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算する
array array_uintersect_assoc ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func )
データの比較にコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算します。
array_uintersect()と異なり、キーが比較に使用される ことに注意してください。データはコールバック関数を用いて比較されます。
array_uintersect_uassoc ― データと添字の比較にコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算する
array array_uintersect_uassoc ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func , callback $key_compare_func )
データと添字の比較にコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算します。 array_uintersect()と異なり、 キーが比較に使用されることに注意してください。 データと添字は、それぞれ個別のコールバック関数を用いて比較されます。
array_intersect_uassoc ― 追加された添字の確認も含め、コールバック関数を用いて 配列の共通項を確認する
array array_intersect_uassoc ( array $array1 , array $array2 [, array $ ... ], callback $key_compare_func )
array_intersect_uassoc() は、全ての引数に現れる array1 の全ての値を含む配列を返します。 array_intersect() と異なり、 キーが比較に使用されることに注意してください。
比較は、ユーザが指定したコールバック関数を利用して行われます。 この関数は、1 つめの引数が 2 つめより小さい / 等しい / 大きい 場合にそれぞれ 負の数 / ゼロ / 正の数 を返す必要があります。
array_intersect_ukey ― キーを基準にし、コールバック関数を用いて 配列の共通項を計算する
array array_intersect_ukey ( array $array1 , array $array2 [, array $... ], callback $key_compare_func )
array_intersect_ukey() は、他の全ての引数に存在する array1 の値を全て有する配列を返します。
比較は、ユーザが指定したコールバック関数を利用して行われます。 この関数は、1 つめの引数が 2 つめより小さい / 等しい / 大きい 場合にそれぞれ 負の数 / ゼロ / 正の数 を返す必要があります。


ソート処理をするもの

uasort ― ユーザ定義の比較関数で配列をソートし、連想インデックスを保持する
bool uasort ( array &$array , callback $cmp_function )
この関数は、配列インデックスが関連する配列要素との関係を保持するような配列をソートします。
主に実際の配列の順序に意味がある連想配列をソートするためにこの関数は使用されます。
uksort ― ユーザ定義の比較関数を用いて、キーで配列をソートする
bool uksort ( array &$array , callback $cmp_function )
uksort() は、 ユーザ定義の比較関数を用いて配列のキーをソートします。 ソートしたい配列を複雑な基準でソートする必要がある場合には、 この関数を使う必要があります。
usort ― ユーザー定義の比較関数を使用して、配列を値でソートする
bool usort ( array &$array , callback $cmp_function )
この関数は、ユーザー定義の比較関数により配列をその値でソートします。 ソートしたい配列を複雑な基準でソートする必要がある場合、 この関数を使用するべきです。
注意: 二つのメンバーの比較結果が等しいとなった場合、 ソートされた配列の順番は定義されません。
注意: この関数は、 array パラメータの要素に対して新しいキーを割り当てます。 その際、単純にキーを並べ替える代わりに、 すでに割り当てられている既存のキーを削除してしまいます。