Reputation: 3740
Hi I'm Trying to merge two arrays and also want to remove duplicate values from final Array.
Here is my Array 1:
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
)
And this is my array 2:
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
)
I'm using array_merge
for merging both arrays into one array. it is giving output like this
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
)
I want to remove these duplicate entries or can I remove these before merging... Pleas help.. Thanks!!!!!!!
Upvotes: 138
Views: 166184
Reputation: 3027
In addition to the answer above, from PHP 7.4 you can make use of the spread operator:
array_unique([...$arr1, ...$arr2]);
Upvotes: 0
Reputation: 15451
In my case I had to use ->toArray()
array_unique(array_merge($array1->toArray(),$array2->toArray()), SORT_REGULAR);
which results of combining both of these answers
Upvotes: 1
Reputation: 357
The best solution above faces a problem when using the same associative keys, array_merge() will merge array elements together when they have the same NON-NUMBER key, so it is not suitable for the following case
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("c"=>"red","d"=>"black","e"=>"green");
If you are able output your value to the keys of your arrays instead (e.g ->pluck('name', 'id')->toArray() in Eloquent), you can use the following merge method instead
array_keys(array_merge($a1, $a2))
Basically what the code does is it utilized the behavior of array_merge() to get rid of duplicated keys and return you a new array with keys as array elements, hope it helps
Upvotes: 0
Reputation: 39
You can use this code to get the desired result. It will remove duplicates.
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
$result=array_unique(array_merge($a1,$a2));
print_r($result);
Upvotes: 3
Reputation: 636
Merging two array will not remove the duplicate you can try the below example to get unique from two array
$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);
Upvotes: 1
Reputation: 10607
array_unique(array_merge($array1,$array2), SORT_REGULAR);
https://www.php.net/manual/en/function.array-unique.php
Upvotes: 317
Reputation: 4794
As already mentioned, array_unique() could be used, but only when dealing with simple data. The objects are not so simple to handle.
When php tries to merge the arrays, it tries to compare the values of the array members. If a member is an object, it cannot get its value and uses the spl hash instead. Read more about spl_object_hash here.
Simply told if you have two objects, instances of the very same class and if one of them is not a reference to the other one - you will end up having two objects, no matter the value of their properties.
To be sure that you don't have any duplicates within the merged array, Imho you should handle the case on your own.
Also if you are going to merge multidimensional arrays, consider using array_merge_recursive() over array_merge().
Upvotes: 9
Reputation: 527
It will merger two array and remove duplicate
<?php
$first = 'your first array';
$second = 'your second array';
$result = array_merge($first,$second);
print_r($result);
$result1= array_unique($result);
print_r($result1);
?>
Try this link link1
Upvotes: 8
Reputation: 2713
try to use the array_unique()
this elminates duplicated data inside the list of your arrays..
Upvotes: 4