如何从PHP数组中删除重复值?


当前回答

$array = array("a" => "moon", "star", "b" => "moon", "star", "sky");

// Deleting the duplicate items
$result = array_unique($array);
print_r($result);

参考:演示

其他回答

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] =>切尔西 史密斯 )

$result = array();
foreach ($array as $key => $value){
  if(!in_array($value, $result))
    $result[$key]=$value;
}

我们可以很容易地使用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 = array_values( array_flip( array_flip( $array ) ) );

可以比array_unique快。

有时候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 */