Php 在数组中查找重复值,该数组创建一个新数组,其中键为重复键,值为重复项
我正在尝试查找数组中的所有重复项,并创建一个新数组,其中键作为重复值键,值作为其重复项的键Php 在数组中查找重复值,该数组创建一个新数组,其中键为重复键,值为重复项,php,arrays,Php,Arrays,我正在尝试查找数组中的所有重复项,并创建一个新数组,其中键作为重复值键,值作为其重复项的键 $arr_duplicates = array_keys(array_unique( array_diff_assoc( $array, array_unique( $array ) ) )); 范例 [1] => 10 [2] => 11 [3] => 12 [4] => 12 [5] => 12 [6] => 13 [7] => 13 在我申请重复支票后,
$arr_duplicates = array_keys(array_unique( array_diff_assoc( $array, array_unique( $array ) ) ));
范例
[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 ) ) ));
谢谢这应该是你想要的。在数组上循环,查看该值是否已经存在。如果是,请将其添加到结果中
$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;
}
}
演示:试试这个方法,与其他解决方案相比,可能会提高速度。但是,在大型数据集上会使用更多的内存
<?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);
什么?我需要一百万个东西?Neal抱歉,很难解释我要解释的内容基本上我只需要将所有的复制作为一个数组,但我的新数组的值应该是复制它们的键。你为什么编辑输出格式?不能有两个元素具有相同的键(
3
)。@RocketHazmat-我添加了一些注释来解释我需要更多的内容details@user2619159:您仍然不能使键3
同时等于4
和5
(除非将其设置为数组)。将$k>$first\u index
更改为$k!=$首先_index
要使它以任何顺序与索引一起工作,例如$array=[7=>13,6=>13]
@RocketHazmat这是一个很棒的函数,我以前也尝试过foreach(),唯一的问题是,我正在处理非常大的数组,即10000++记录,而且速度非常快important@user2619159:你尝试的任何其他方法都可能会慢一些。您是否注意到此代码存在速度问题?如果不是,那么这可能不是问题:-PSpeed可以通过跟踪每个值第一次出现的时间来改进。你可能会用一个可能的速度提升换取大量的内存使用。@Nate:我想你可以缓存array\u search
查找,这可能会更快,但我不确定有多快。不错,速度非常快