123

您好我正在尝试合并两个数组,并且还想从最终数组中删除重复值。

这是我的数组 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
)

这是我的数组 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

)

我正在使用array_merge将两个数组合并为一个数组。它给出这样的输出

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

)

我想删除这些重复的条目,或者我可以在合并之前删除它们...请帮助..谢谢!!!!!!!!!

4

8 回答 8

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

http://se2.php.net/manual/en/function.array-unique.php

于 2012-11-20T09:14:09.203 回答
9

如前所述,可以使用array_unique(),但仅限于处理简单数据时。对象不是那么容易处理。

当 php 尝试合并数组时,它会尝试比较数组成员的值。如果成员是对象,则它无法获取其值并使用 spl 散列代替。在此处阅读有关 spl_object_hash 的更多信息。

简单地说,如果你有两个对象,同一个类的实例,如果其中一个不是对另一个的引用 - 你最终将拥有两个对象,无论它们的属性值如何。

为确保合并数组中没有任何重复项,恕我直言,您应该自行处理此案。

此外,如果您要合并多维数组,请考虑使用array_merge_recursive()而不是array_merge()

于 2012-11-20T09:20:37.803 回答
7

它将合并两个数组并删除重复项

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

试试这个链接 link1

于 2012-11-20T09:16:25.453 回答
4

尝试使用array_unique()

这消除了数组列表中的重复数据..

于 2012-11-20T09:15:23.460 回答
1

您可以使用此代码来获得所需的结果。它将删除重复项。

$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);
于 2020-10-29T13:21:28.197 回答
1

上面的最佳解决方案在使用相同的关联键时会遇到一个问题,array_merge() 会在数组元素具有相同的 NON-NUMBER 键时将它们合并在一起,因此不适合以下情况

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

如果您能够将值输出到数组的键中(例如 Eloquent 中的 ->pluck('name', 'id')->toArray()),则可以改用以下合并方法

array_keys(array_merge($a1, $a2))

基本上代码所做的是它利用 array_merge() 的行为来摆脱重复的键并返回一个带有键作为数组元素的新数组,希望它有所帮助

于 2021-01-14T08:11:46.007 回答
1

就我而言,我不得不使用->toArray()

array_unique(array_merge($array1->toArray(),$array2->toArray()), SORT_REGULAR);

结合这两个答案的结果

于 2021-03-01T09:12:23.867 回答
0

合并两个数组不会删除重复项,您可以尝试以下示例从两个数组中获取唯一性

$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);
于 2018-09-06T09:28:50.297 回答