如何在数组中删除重复项?

6

如何删除数组中的重复项?

例如,如果我有以下数组:

$array = array('1','1','2','3');

我希望它变得更好

$array = array('2','3');

因此,如果找到其中两个值,我希望它删除整个值。


我会先尝试使用这个函数编写一些代码。它可以计算一个值至少被使用的次数,而且键值对非常好。 http://php.net/array_count_values - hakre
请查看https://dev59.com/pnRC5IYBdhLWcg3wOeWB。 - bestprogrammerintheworld
5个回答

4
你可以使用array_count_values()来过滤它们:
$array = array('1','1','2','3');
$res = array_keys(array_filter(array_count_values($array), function($freq) {
    return $freq == 1;
}));

该函数返回一个由原始值和相应频率组成的数组;然后,您只选择单一频率。最终结果通过检索键获得。 演示

4

根据PHP版本,这应该可以在所有PHP版本>= 4.0.6中运行,因为它不需要匿名函数,而匿名函数需要PHP>= 5.3:

function moreThanOne($val) {
    return $val < 2;
}


$a1 = array('1','1','2','3');
print_r(array_keys(array_filter(array_count_values($a1), 'moreThanOne')));

演示 (更改下拉列表中的PHP版本以选择您正在使用的PHP版本)

这个能够工作是因为:

  1. array_count_values会遍历数组并为每个值创建一个索引,并在每次再次遇到该值时增加它。
  2. array_filter将传递所创建的数组,并通过之前定义的 moreThanOne 函数,如果它返回 false,则键/值对将被删除。
  3. array_keys将丢弃数组的 value 部分,创建一个仅包含已定义的键的值的数组。 这最后一步给出了一个结果,该结果删除了原始数组中存在多次的所有值。

2
匿名函数在5.3中被引入。 - Ja͢ck
好的,所以要修改“不仅仅是PHP 5.4”,应该改为“适用于PHP > 4.0.6” ^^ - Jon
它也可以在4.0.6中工作,那是array_filter被引入的时候 :) - Ja͢ck
+1 恰当运用 PHP 原生函数。解释清晰,附有演示。 - bestprogrammerintheworld
Grr @jack =P 哈哈,再次说得好,也许太累了,不应该为代码创建版本要求。=] - Jon

2
尝试使用以下代码:
<?php
  $array = array('1','1','2','3');

 foreach($array as $data){
  $key= array_keys($array,$data);
   if(count($key)>1){

  foreach($key as $key2 => $data2){
    unset($array[$key2]);
      }
    }
   }
   $array=array_values($array);
   print_r($array);


?>

输出

    Array ( [0] => 2 [1] => 3 )

2

2
从数组中删除重复的值。
 array_unique($array)

 $array = array(4, "4", "3", 4, 3, "3");
 $result = array_unique($array);
 print_r($result);

 /*
   Array
   (
      [0] => 4
      [2] => 3
   )
  */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接