web-dev-qa-db-ja.com

PHP-2つの配列を1つの配列にマージ(重複も削除)

こんにちは私は2つの配列をマージしようとしているし、また最終的な配列から重複した値を削除したいです。

これが私の配列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

)

両方の配列を1つの配列にマージするために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

)

これらの重複したエントリを削除したい、またはマージする前にこれらを削除できますか?

93
Ravi
array_unique(array_merge($array1,$array2), SORT_REGULAR);

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

197
C. E.

すでに述べたように、 array_unique() は、単純なデータを処理する場合にのみ使用できます。オブジェクトの処理はそれほど単純ではありません。

Phpは、配列をマージしようとすると、配列メンバーの値を比較しようとします。メンバーがオブジェクトの場合、その値を取得できず、代わりにsplハッシュを使用します。 spl_object_hashの詳細はこちらをご覧ください

2つのオブジェクト、まったく同じクラスのインスタンスがあり、一方が他方への参照でない場合、単にプロパティの値に関係なく2つのオブジェクトを持つことになります。

マージされた配列内に重複がないことを確認するには、Imho自身でケースを処理する必要があります。

また、多次元配列をマージする場合は、 array_merge_recursive() over array_merge() の使用を検討してください。

6

2つの配列をマージし、重複を削除します

<?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

4
Daxen

array_unique()を使用してみてください

これにより、配列のリスト内の重複データが排除されます。

3
Jhonathan H.

2つの配列をマージしても重複は削除されません。2つの配列から一意になるように以下の例を試すことができます

$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);
0
kantsverma