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


109

こんにちは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

)

array_merge両方の配列を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

[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と$ array2ではなく、$ array1 [0]と$ array2 [0]をマージしたいからです。各配列の最初の項目にarray_mergeを実行しよう
ブギ

配列は動的なので、常に$ array1 [0]および$ array2 [0]とは限りません
Ravi

配列内の各オブジェクトのIDを比較できるものはありますか?
Ravi

1
マージしようとしているのは配列ではなくオブジェクトなので、機能しない最初のコメントを忘れてください。あなたはそれを手動でやらなければならない
Bgi

回答:


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

http://se2.php.net/manual/en/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でエラーが発生しました。配列が文字列のみの場合、3番目の引数は必要ありません。文字列でない場合、または内容を暗黙的に文字列にキャストできない場合は、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

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


7

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

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

非常に同じクラスのインスタンスである2つのオブジェクトがあるかどうか、およびそれらの1つが他のオブジェクトへの参照ではない場合は、プロパティの値に関係なく、2つのオブジェクトを持つことになります。

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

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


4

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

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


0

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.