PHP-将两个数组合并为一个数组(也删除重复项)


109

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

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

)

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


因为您想合并$ array1 [0]和$ array2 [0]而不是$ array1和$ array2。尝试在每个数组的第一个项目运行array_merge
华大基因

数组是动态的..所以它不会总是$ array1 [0]和$ array2 [0]
Ravi 2012年

有什么可以比较数组中每个对象的ID的东西???
拉维2012年

1
忘记我的第一个无效的注释,因为您尝试合并的不是数组而是对象。您必须手动执行
Bgi 2012年

Answers:


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

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


5
@ Hemantxp>没有SORT_REGULAR,则出现此错误:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi

4
值得注意的是array_unique返回过滤后的数组(而不是直接作用于传入的数组参数),因此您需要先存储结果,然后才能使用它
Mike

7
默认情况下,array_unique尝试将数组值用作字符串。因此,错误@Ravi遇到了。如果您的数组仅是字符串,则不需要第三个参数。如果不是字符串,或者无法将内容隐式转换为字符串,则需要SORT_REGULAR参数。
David Baucum,

@ Hemantwagh07对于数组对象,如果我们不使用SORT_REGULAR它,则给出Recoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
mapmalith

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


7

如前所述,array_unique()可以使用,但仅当处理简单数据时才可以使用。这些对象并不是那么简单。

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

简单地说,如果您有两个对象,它们是同一类的实例,并且其中一个实例不是对另一个实例的引用,那么无论它们的属性值如何,您最终都会拥有两个对象。

为了确保合并数组中没有重复项,Imho应该自行处理。

另外,如果要合并多维数组,请考虑在array_merge()上使用array_merge_recursive()


4

尝试使用 array_unique()

这样可以消除数组列表中的重复数据。


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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.