PHPにはこれを行う関数が組み込まれていませんが、組み合わせarray_count_values
てarray_intersect
必要な配列を取得することができます。
最初の値は、配列に存在する値を知るために使用され(そして、それらをカウントして、重複していないすべての値を簡単に除外できるようにします)、2番目の関数はキーを保持します。重複した値を前もって知っている場合は、後者を使用するだけで済みます。
$duplicatesArray = array_intersect($array, array($duplicate));
完全な例:
/**
* @param array $array
* @param int $threshold (optional) minimum number of elements per group
* @return array
*/
function array_group_by_value(array $array, $threshold = 1)
{
$grouped = array();
foreach(array_count_values($array) as $value => $count)
{
if ($count < $threshold) continue;
$grouped[$value] = array_intersect($array, array($value));
}
return $grouped;
}
使用例:
$test = array('a', 'b', 'a', 'a', 'b', 'c');
var_dump(array_group_by_value($test, 2));
出力:
array(2) {
["a"]=>
array(3) {
[0]=>
string(1) "a"
[2]=>
string(1) "a"
[3]=>
string(1) "a"
}
["b"]=>
array(2) {
[1]=>
string(1) "b"
[4]=>
string(1) "b"
}
}