如何从PHP数组中删除重复值?
当前回答
//Find duplicates
$arr = array(
'unique',
'duplicate',
'distinct',
'justone',
'three3',
'duplicate',
'three3',
'three3',
'onlyone'
);
$unique = array_unique($arr);
$dupes = array_diff_key( $arr, $unique );
// array( 5=>'duplicate', 6=>'three3' 7=>'three3' )
// count duplicates
array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )
其他回答
有时候array_unique()不是解决方法, 如果你想获得唯一且重复的道具……
$unique=array("","A1","","A2","","A1","");
$duplicated=array();
foreach($unique as $k=>$v) {
if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
{ unset($unique[$kt]); $duplicated[]=$v; }
}
sort($unique); // optional
sort($duplicated); // optional
结果
array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
根据数组的大小,我发现
$array = array_values( array_flip( array_flip( $array ) ) );
可以比array_unique快。
如果你关心性能并且数组很简单,可以使用:
array_keys(array_flip($array));
它比array_unique快很多倍。
我们可以很容易地使用arar_unique ($array);删除重复的元素 但是这个方法的问题是元素的索引不是按顺序的,如果以后在其他地方使用会引起问题。
Use
$arr = array_unique($arr);
$arr = array_values($arr);
print_r($arr);
Or
$arr = array_flip($arr);
$arr = array_flip($arr);
$arr = array_values($arr);
print_r($arr);
第一次翻转,翻转键值对,从而将具有相似键(即最初的值)的元素组合在一起。
第二次翻转还原所有键值对。最后,array_value()设置每个值的key从0开始。
注意:不能用于具有预定义键值对的关联数组
array_unique()函数的替代方法。
使用蛮力算法
//[1]这个数组包含重复的项
火柴美元=[“乔治”、“梅尔文chelsy”梅尔文”、“乔治”,“史密斯”];
//[2]新数组的容器,不包含任何重复项
$arr = [];
//[3]获取复制数组的长度,并将其设置为用于for循环的var len
$len = count($matches);
//[4]如果匹配数组键($i)当前循环迭代不可用 //[4]数组$arr然后推送匹配的当前迭代键值[$i] //[4]到数组arr。
(我= 0;我美元 If (array_search($匹配[$i], $arr) === false){ array_push (arr美元,$ matches [$ i]); } } //打印数组$arr。 print_r (arr); / /结果:数组 ( [0] => jorge [1] => melvin [2] =>切尔西 史密斯 )