Php 仅保留数组中每个重复值的第一个实例

Php 仅保留数组中每个重复值的第一个实例,php,arrays,Php,Arrays,考虑以下填充的数组: [ 1 => 21 2 => 19 3 => 19 4 => 19 5 => 18 6 => 18 7 => 16 8 => 15 9 => 15 10 => 15 11 => 15 12 => 14 13 => 14 14 => 14 15 => 13 16 => 13 17 => 12 18 =&g

考虑以下填充的数组:

[
  1 => 21
  2 => 19
  3 => 19
  4 => 19
  5 => 18
  6 => 18
  7 => 16
  8 => 15
  9 => 15
  10 => 15
  11 => 15
  12 => 14
  13 => 14
  14 => 14
  15 => 13
  16 => 13
  17 => 12
  18 => 11
  19 => 11
  20 => 11
  21 => 11
  22 => 11
  23 => 9
  24 => 9
  25 => 8
]
我正在尝试迭代此数组,并且只保留一个和每个重复值的第一个实例,以及键,例如,我可以获得以下输出:

[
  2 => 19
  5 => 18
  8 => 15
  12 => 14
  15 => 13
  18 => 11
  23 => 9
]
到目前为止,我只能保存每个复制值的一个不稳定的实例,结果是:

[
  3 => 19
  6 => 18
  9 => 15
  13 => 14
  16 => 13
  19 => 11
  24 => 9
]
我正在使用以下代码接收此输出:

$arrayFiltered = array_unique(array_diff_assoc($array, array_unique($array)));
更新 根据你的最新消息,我给你准备了这个。如果
$new
数组中的值的计数大于1(重复),则基本上只将该值返回给
$new
数组。这就是我们要做的。它将清理所有其他内容,并根据需要仅显示每个副本的第一个实例

$new = array_unique(array_filter($array, function(&$item) use($array){

    if(count(array_keys($array, $item)) > 1) {
        return $item;
    }

}));

返回:

Array
(
    [2] => 19
    [5] => 18
    [8] => 15
    [12] => 14
    [15] => 13
    [18] => 11
    [23] => 9
)

尝试使用
foreach()
array\u count\u values()
array\u search()
如下:

$new    =   array();
$multi  =   array_count_values($arr);
foreach($multi as $key => $value) {
        if($value <= 1)
            continue;
        $search         =   array_search($key,$arr);
        $new[$search]   =   $arr[$search];
    }

print_r($new);

你在考虑什么来过滤这个数组?@j08691我已经找到了许多针对普通数组的解决方案,但不是针对维度数组的。你需要努力,并将其发布到你的问题中。循环或数组映射似乎是一个合乎逻辑的起点。@j08691是的,我很抱歉,我尝试了10种不同的方法。您需要发布正在使用的代码以及代码运行后的预期输出。我们不知道您期望的结果是什么。好的,但这将返回21、16、12和8等值,这些值不会重复。我不需要这些。@user2094178我已经用您需要的内容更新了我的答案,以获得所需的值。谢谢您,先生,这真是太好了。
(
    [2] => 19
    [5] => 18
    [8] => 15
    [12] => 14
    [15] => 13
    [18] => 11
    [23] => 9
)