[PHP] 配列操作関数(検索・集計)

PHPで配列操作をする際にあの処理をしたいんだけど、何の関数だっけなーっていうことがあるので、いくつか関数についてまとめます。

array_search:検索

指定した値で配列を検索し、ヒットした最初のキーを返します。

PHP
$array = [0 => 'hoge', 1 => 'huga', 2 => 'piyo', 3 => 'huga'];

$key = array_search('piyo', $array); 
// $key = 2

$key = array_search('huga', $array); 
// $key = 1

array_keys:検索

array_keysは配列のキーを返すイメージが大きいですが、引数を与えることで指定した値で配列を検索し、ヒットしたキーを取得することができます。

PHP
$array = [0 => 'hoge', 1 => 'huga', 2 => 'piyo', 3 => 'huga'];

$keys = array_keys($array); 
// $keys = [0, 1, 2, 3]

$keys = array_keys($array, 'huga'); 
// $keys = [1, 3]

array_filter:絞り込み

コールバック関数を用いて配列を絞り込みます。

PHP
function isHuga($var) {
    return $var === 'huga';
}

$array = [0 => 'hoge', 1 => 'huga', 2 => 'piyo', 3 => 'huga'];

$filtered = array_filter($array, 'isHuga'); 
// $filtered = [1 => 'huga', 3 => 'huga']

空・null・falseの除去

コールバックを渡さない場合、各要素をboolean型にキャストし、falseのものが除去されます。

PHP
$array = [
    0 => 'foo',
    1 => false,
    2 => -1,
    3 => null,
    4 => '',
    5 => '0',
    6 => 0,
];

$array2 = array_filter($array); 
// $array2 = [0 => 'foo', 2 => -1]

array_map:各要素にコールバックの適用

配列の各要素にコールバックを適用した配列を返します。
数値の配列でそれぞれの要素を2倍することや、文字列で先頭に文字を付与するなどの使い方ができます。

PHP
function addStar($var) {
    return '★ ' . $val;
}

$array = [0 => 'hoge', 1 => 'huga', 2 => 'piyo', 3 => 'huga'];

$array2 = array_map('addStar', $array); 
// $array2 = [0 => '★ hoge', 1 => '★ huga', 2 => '★ piyo', 3 => '★ huga']

array_reduce:コールバックを通して配列を1つにまとめる

コールバックを繰り返し適用し、配列を1つの値にまとめます。

PHP
function sum($carry, $item) {
    $carry += $item;
    return $carry;
}

$a = [1, 2, 3, 4, 5];
$b = array_reduce($a, "sum", 3); 
// $b = 18

初期値の3に配列の1~5を順に足していくため、3 + 1 + 2 + 3 + 4 + 5 = 18 となります。