我试图找到我的数组中的所有重复项,并创建一个新的数组,其中键作为重复值键,值作为其重复的键
例如
[1] => 10
[2] => 11
[3] => 12
[4] => 12
[5] => 12
[6] => 13
[7] => 13
我应用重复检查后,我只需要
[4] => [3] // value of key 4 is dupe of key 3
[5] => [3] // value of key 5 is dupe of key 3
[7] => [6] // value of key 7 is dupe of key 6
这会让我获得所有重复的密钥,但我需要重复的密钥,其值为重复的密钥
$arr_duplicates = array_keys(array_unique( array_diff_assoc( $array, array_unique( $array ) ) ));
由于
答案 0 :(得分:2)
尝试使用此方法来提升其他解决方案的速度。但是,在大型数据集上会占用更多内存。
<?php
$orig = array(
1 => 10,
2 => 11,
3 => 12,
4 => 12,
5 => 12,
6 => 13,
7 => 13
);
$seen = array();
$dupes = array();
foreach ($orig as $k => $v) {
if (isset($seen[$v])) {
$dupes[$k] = $seen[$v];
} else {
$seen[$v] = $k;
}
}
unset($seen);
var_dump($dupes);
答案 1 :(得分:1)
这应该做你想要的。循环遍历数组,并查看该值是否已存在。如果是,请将其添加到结果中。
$arr_duplicates = array();
foreach($array as $k=>$v){
// array_search returns the 1st location of the element
$first_index = array_search($v, $array);
// if our current index is past the "original" index, then it's a dupe
if($k != $first_index){
$arr_duplicates[$k] = $first_index;
}
}