2010-09-11 38 views
10

Trước hết, tôi muốn chỉ ra cho tất cả những người săn câu hỏi trùng lặp mà this question không trả lời đầy đủ câu hỏi của tôi.Làm thế nào tôi có thể loại bỏ TẤT CẢ các bản sao từ một mảng trong PHP?

Bây giờ, tôi đã có một mảng. Chúng tôi sẽ nói rằng mảng là array(1, 2, 2, 3, 4, 3, 2)

Tôi cần phải loại bỏ các bản sao. Không chỉ là một trong các bản sao, nhưng tất cả, do đó kết quả sẽ là array(1, 4)

Tôi nhìn array_unique(), nhưng điều đó sẽ chỉ dẫn đến array(1, 2, 3, 4)

Bất kỳ ý tưởng?

+0

bạn có thể disambiguate câu hỏi của bạn bằng cách thay đổi nó để: "Làm thế nào tôi có thể loại bỏ các bản sao, _and các giá trị duplicated_, từ một mảng ? " – systemovich

Trả lời

12

Bạn có thể sử dụng sự kết hợp của array_unique, array_diff_assocarray_diff:

array_diff($arr, array_diff_assoc($arr, array_unique($arr))) 
+0

+1 cho sự khéo léo, mặc dù thật khó để đọc được ý định khi bạn thấy một dòng như thế! –

+0

điều này là chậm hơn đáng kể so với cách tiếp cận của Ciprian mặc dù, tôi chỉ cần làm một điểm chuẩn nhanh chóng và điều này là 4x chậm hơn. Một chút ngạc nhiên. –

7

function removeDuplicates($array) { 
    $valueCount = array(); 
    foreach ($array as $value) { 
     $valueCount[$value]++; 
    } 

    $return = array(); 
    foreach ($valueCount as $value => $count) { 
     if ($count == 1) { 
     $return[] = $value; 
     } 
    } 

    return $return; 
} 
+0

Vòng lặp đầu tiên có thể được thay thế hiệu quả hơn bởi $ arrayCount = array_count_values ​​($ array) –

+0

Nhưng +1 cho bạn, và chào mừng bạn đến Stack Overflow! –

+0

Cảm ơn. Tôi nghĩ thuật toán cũng quan trọng. Ai đó đã đăng một giải pháp bằng cách sử dụng các hàm PHP gốc. –

Các vấn đề liên quan