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 및 $ array2가 아닌 $ array1 [0] 및 $ array2 [0]을 병합하려고하기 때문입니다. 각 어레이의 첫 번째 항목에서 array_merge를 실행하십시오
Bgi

배열은 동적 ..이므로 항상 $ 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 오류가 발생했습니다. 배열이 문자열 일 경우 세 번째 인수가 필요하지 않습니다. 문자열이 아니거나 내용을 암시 적으로 문자열로 캐스트 할 수없는 경우 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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.