2012-12-13 25 views
22
$result = array(
    0=>array('a'=>1,'b'=>'Hello'), 
    1=>array('a'=>1,'b'=>'other'), 
    2=>array('a'=>1,'b'=>'other'), 
); 

Nếu nó được nhân đôi loại bỏ nó, vì vậy kết quả là như sau:Remove nhân đôi các yếu tố của mảng kết hợp trong PHP

$result = array(
    0=>array('a'=>1,'b'=>'Hello'), 
    1=>array('a'=>1,'b'=>'other') 
); 

bất kỳ có thể biết để làm được điều này?

Cảm ơn

+0

Điều gì làm cho nó lặp lại 'a = '&' b = other' hoặc chỉ 'b = other' ... – Baba

+0

' a' và' b' @ Bada cảm ơn – kn3l

+0

http://stackoverflow.com/questions/3767318/how-to-remove-duplicate-values-from-an-associative-array-based-on-a-specific-val –

Trả lời

16

Trước tiên, bạn không thể sử dụng đơn giản array_unique cho vấn đề này vì array_unique nội bộ đối xử với các mục mảng như dây đàn, đó là lý do "không thể chuyển đổi Array String" thông báo sẽ xuất hiện khi sử dụng array_unique cho điều này .

Vì vậy, cố gắng này:

$result = array(
    0=>array('a'=>1,'b'=>'Hello'), 
    1=>array('a'=>1,'b'=>'other'), 
    2=>array('a'=>1,'b'=>'other') 
); 

$unique = array_map("unserialize", array_unique(array_map("serialize", $result))); 

print_r($unique); 

Kết quả:

Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => Hello 
     ) 

    [1] => Array 
     (
      [a] => 1 
      [b] => other 
     ) 

) 

Serialization là rất tiện dụng cho các vấn đề như vậy.

Nếu bạn cảm thấy đó là quá nhiều ma thuật cho bạn, hãy kiểm tra này blog post

function array_multi_unique($multiArray){ 

    $uniqueArray = array(); 

    foreach($multiArray as $subArray){ 

    if(!in_array($subArray, $uniqueArray)){ 
     $uniqueArray[] = $subArray; 
    } 
    } 
    return $uniqueArray; 
} 

$unique = array_multi_unique($result); 

print_r($unique); 

Trớ trêu thay, in_array đang làm việc cho mảng, nơi array_unique không.

+3

Vâng, thực sự 'mảng_unique' là khỏe. Xem câu trả lời của tôi: http://stackoverflow.com/a/13860140/367456 – hakre

38

Bất kể những gì người khác đang cung cấp ở đây, bạn đang tìm kiếm một hàm gọi là array_uniqueDocs. Điều quan trọng ở đây là để thiết lập các tham số thứ hai để SORT_REGULAR và sau đó là công việc rất dễ dàng:

array_unique($result, SORT_REGULAR); 

Ý nghĩa của SORT_REGULAR cờ là:

so sánh các mặt hàng bình thường (không thay đổi các loại)

Và đó là những gì bạn muốn. Bạn muốn compare arraysDocs ở đây và không thay đổi loại của chúng thành chuỗi (đó sẽ là mặc định nếu thông số không được đặt).

array_unique làm một so sánh nghiêm ngặt (=== trong PHP), cho mảng này có nghĩa là:

$a === $bTRUE nếu $ a và $ b có các cặp khóa/giá trị như nhau theo thứ tự và các loại tương tự .

Output (Demo):

Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => Hello 
     ) 

    [1] => Array 
     (
      [a] => 1 
      [b] => other 
     ) 
) 
+0

cool, didmt biết rằng một tham số thứ hai là availible tại al.l –

+1

@ DavidMüller: Hướng dẫn sử dụng luôn đáng để ghé thăm;) Ít nhất đó là cách tôi thực hiện nếu nó trở nên cụ thể. Bạn không thể biết từng chức năng trong và ngoài. – hakre

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