6

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

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

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

我想让它变成

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

所以如果找到其中两个,我希望它删除整个值

4

5 回答 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;
}));

该函数返回一个包含原始值及其各自频率的数组;然后你只选择单个频率。最终结果是通过检索密钥获得的。

演示

于 2013-05-04T08:54:13.267 回答
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')));

DEMO(在下拉菜单中更改 PHP 版本以选择您正在使用的 PHP 版本)

这有效,因为:

  1. array_count_values将遍历数组并为每个值创建一个索引,并在每次再次遇到它时递增它。
  2. array_filter将获取创建的数组并将其传递给moreThanOne之前定义的函数,如果它返回false,则键/值对将被删除。
  3. array_keys将丢弃数组的value一部分,创建一个数组,其中的值是已定义的键。最后一步为您提供了一个结果,该结果删除了原始数组中多次存在的所有值。
于 2013-05-04T08:56:42.420 回答
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 )
于 2013-05-04T08:44:00.653 回答
2

PHP 提供了很多数组函数,你只需要将它们组合起来:

$arr = array_keys(array_filter(array_count_values($arr), function($val) {
    return $val === 1;
}));

参考:array_keys, array_filter,array_count_values

演示

于 2013-05-04T08:53:24.530 回答
2

从数组中删除重复值。

 array_unique($array)

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

 /*
   Array
   (
      [0] => 4
      [2] => 3
   )
  */
于 2013-05-17T06:11:23.267 回答