从数组中返回重复值键

时间:2014-11-07 11:20:38

标签: php arrays

我需要确定值的键,它们与数组有重复。

我想出的是:

$duplicates_keys = array();
$unique = array_unique($in);
$duplicates = array_diff_assoc($in, $unique);
foreach ($in as $key => $val){
    if (in_array($val,$duplicates)){
        $duplicates_keys[]=$key;
    }
}

哪个有效,但资源密集,是否有更快的方法呢?

2 个答案:

答案 0 :(得分:0)

请使用array_intersect()

$duplicates_keys = array_intersect($in, $duplicates);

array_intersect()

答案 1 :(得分:0)

根据我的评论,我怀疑这是一个瓶颈。但是,您可以将迭代次数减少到一次,如下所示:

$temp=[];
$dup=[];
foreach ($in as $key=>$val) {
    if(isset($temp[$val])){
        $dup[]=$key;
    }else{
        $temp[$val]=0;
    }
}

请注意,该值在temp中设置为数组键,因此您可以使用O(1)isset而不是in_array,它必须搜索完整数组,直到找到该值。 / p>

这在理论上比你的例子更快,但是你需要对它进行分析以确定(因为你应该已经完成​​以确定你当前的代码很慢)。

可能你可以做一些影响更大的事情,比如缓存或更好的数据库查询