我需要确定值的键,它们与数组有重复。
我想出的是:
$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;
}
}
哪个有效,但资源密集,是否有更快的方法呢?
答案 0 :(得分:0)
答案 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>
这在理论上比你的例子更快,但是你需要对它进行分析以确定(因为你应该已经完成以确定你当前的代码很慢)。
可能你可以做一些影响更大的事情,比如缓存或更好的数据库查询