簡體   English   中英

僅保留數組中每個重復值的第一個實例

[英]Mantain only first instance of each duplicated values in array

考慮以下填充數組:

[
  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
]

我正在嘗試迭代這個數組,並且只保留一個和每個重復值的第一個實例,以及 key ,例如我可以有以下輸出:

[
  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 array 中的計數大於 1(重復),它本質上只會將值返回給$new $array 這就是array_unique()用武之地。它會清理其他所有內容,並且僅根據您的需要向您顯示每個副本的第一個實例。

$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_count_values()array_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);

給你:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM