PHP 没有内置函数可以执行此操作,但您可以组合array_count_values
并array_intersect
获得所需的数组。
第一个用于了解数组中确实存在哪些值(并对它们进行计数,以便轻松过滤掉每个不重复的值),第二个函数确实保留键。如果您预先知道重复值,则只需要使用后者:
$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));
Output:
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"
}
}