PHP - Hợp nhất hai mảng thành một mảng (cũng loại bỏ các bản sao)


109

Xin chào, Tôi đang cố gắng hợp nhất hai mảng và cũng muốn xóa các giá trị trùng lặp khỏi Mảng cuối cùng.

Đây là Mảng 1 của tôi:

Array
    (
    [0] => stdClass Object
    (
    [ID] => 749
    [post_author] => 1
    [post_date] => 2012-11-20 06:26:07
    [post_date_gmt] => 2012-11-20 06:26:07
)

Và đây là mảng 2 của tôi:

Array
(
[0] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

)

Tôi đang sử dụng array_mergeđể hợp nhất cả hai mảng thành một mảng. nó đang đưa ra đầu ra như thế này

Array
(
[0] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

[1] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

)

Tôi muốn xóa những mục trùng lặp này hoặc tôi có thể xóa chúng trước khi hợp nhất ... Xin giúp đỡ .. Cảm ơn !!!!!!!


Vì bạn muốn hợp nhất $ array1 [0] và $ array2 [0] chứ không phải $ array1 và $ array2. Cố gắng chạy array_merge trên mục đầu tiên của mỗi mảng
Bgi

mảng là động .. vì vậy nó sẽ không luôn $ array1 [0] và $ array2 [0]
Ravi

có bất cứ điều gì mà tôi có thể so sánh ID của từng đối tượng bên trong một mảng không ???
Ravi

1
Quên nhận xét đầu tiên của tôi sẽ không hoạt động vì những gì bạn đang cố gắng hợp nhất không phải là mảng mà là các đối tượng. Bạn phải làm điều đó theo cách thủ công
Bgi

Câu trả lời:


235
array_unique(array_merge($array1,$array2), SORT_REGULAR);

http://se2.php.net/manual/en/ Chức năng.array-unique.php


5
@ Hemantxp> với ra SORT_REGULAR nó được đưa ra lỗi này:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi

4
Giá trị của nó lưu ý rằng lợi nhuận array_unique mảng lọc (chứ không phải là hành động trực tiếp trên các tham số mảng được thông qua năm), do đó bạn cần phải lưu trữ kết quả trước khi bạn có thể sử dụng nó
Mike

7
Theo mặc định, array_unique cố gắng sử dụng các giá trị mảng dưới dạng chuỗi. Do đó, lỗi @Ravi đã gặp phải. Nếu mảng của bạn chỉ là chuỗi thì bạn không cần đối số thứ ba. Nếu nó không phải là một chuỗi hoặc nội dung không thể được truyền hoàn toàn vào một chuỗi, bạn sẽ cần đối số SORT_REGULAR.
David Baucum

@ Hemantwagh07 Đối với đối tượng mảng, nếu chúng ta không sử dụng SORT_REGULARnó mang lạiRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
mapmalith

7

Nó sẽ hợp nhất hai mảng và loại bỏ trùng lặp

<?php
 $first = 'your first array';
 $second = 'your second array';
 $result = array_merge($first,$second);
 print_r($result);
 $result1= array_unique($result);
 print_r($result1);
 ?>

Hãy thử liên kết này link1


7

Như đã đề cập, array_unique () có thể được sử dụng, nhưng chỉ khi xử lý dữ liệu đơn giản. Các đối tượng không đơn giản để xử lý.

Khi php cố gắng hợp nhất các mảng, nó sẽ cố gắng so sánh các giá trị của các thành viên trong mảng. Nếu một thành viên là một đối tượng, nó không thể nhận được giá trị của nó và thay vào đó sử dụng hàm băm spl. Đọc thêm về spl_object_hash tại đây.

Nói một cách đơn giản nếu bạn có hai đối tượng, các thể hiện của cùng một lớp và nếu một trong số chúng không phải là tham chiếu đến đối tượng kia - bạn sẽ có hai đối tượng, bất kể giá trị của thuộc tính của chúng.

Để đảm bảo rằng bạn không có bất kỳ bản sao nào trong mảng đã hợp nhất, Imho bạn nên tự xử lý trường hợp này.

Ngoài ra, nếu bạn định hợp nhất các mảng đa chiều, hãy cân nhắc sử dụng array_merge_recursive () thay cho array_merge () .


4

cố gắng sử dụng array_unique()

điều này loại bỏ dữ liệu trùng lặp bên trong danh sách các mảng của bạn ..


0

Hợp nhất hai mảng sẽ không loại bỏ trùng lặp, bạn có thể thử ví dụ dưới đây để lấy duy nhất từ ​​hai mảng

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");

$result=array_diff($a1,$a2);
print_r($result);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.