PHP - Łączenie dwóch tablic w jedną tablicę (również Usuń duplikaty)

109

Cześć, próbuję scalić dwie tablice, a także chcę usunąć zduplikowane wartości z ostatecznej tablicy.

Oto moja tablica 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
)

A to jest moja tablica 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

)

Używam array_mergedo łączenia obu tablic w jedną tablicę. daje takie wyjście

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

)

Chcę usunąć te zduplikowane wpisy lub czy mogę je usunąć przed scaleniem… Proszę o pomoc… Dzięki !!!!!!!

Ravi
źródło
Ponieważ chcesz scalić $ array1 [0] i $ array2 [0], a nie $ array1 i $ array2. Spróbuj uruchomić array_merge na pierwszym elemencie każdej tablicy
Bgi
tablica jest dynamiczna ... więc nie zawsze będzie to $ tablica1 [0] i $ tablica2 [0]
Ravi,
czy jest coś, z czym mogę porównać ID każdego obiektu w tablicy ???
Ravi
1
Zapomnij o moim pierwszym komentarzu, który nie zadziała, ponieważ to, co próbujesz scalić, to nie tablice, ale obiekty. Musisz to zrobić ręcznie
Bgi

Odpowiedzi:

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

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

CE
źródło
5
@ Hemantxp> bez SORT_REGULAR daje ten błąd:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi
4
Warto zauważyć, że array_unique zwraca przefiltrowaną tablicę (zamiast działać bezpośrednio na przekazanym parametrze tablicy), więc musisz zapisać wynik, zanim będziesz mógł go użyć
Mike
7
Domyślnie array_unique próbuje użyć wartości tablicy jako ciągów. Stąd pojawił się błąd @Ravi. Jeśli twoja tablica składa się tylko z łańcuchów, nie potrzebujesz trzeciego argumentu. Jeśli nie jest łańcuchem lub zawartość nie może być niejawnie rzutowana na łańcuch, będziesz potrzebować argumentu SORT_REGULAR.
David Baucum
@ Hemantwagh07 Dla obiektów tablicowych, jeśli nie używamy SORT_REGULAR, dajeRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
mapmalith
7

Połączy dwie tablice i usunie duplikat

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

Wypróbuj ten link link1

Daxen
źródło
7

Jak już wspomniano, array_unique () może być używana, ale tylko w przypadku prostych danych. Obiekty nie są takie proste w obsłudze.

Kiedy php próbuje scalić tablice, próbuje porównać wartości członków tablicy. Jeśli element członkowski jest obiektem, nie może uzyskać wartości i zamiast tego używa skrótu spl. Przeczytaj więcej o spl_object_hash tutaj.

Mówiąc prosto, jeśli masz dwa obiekty, instancje tej samej klasy i jeśli jeden z nich nie jest odniesieniem do drugiego - otrzymasz dwa obiekty, niezależnie od wartości ich właściwości.

Aby mieć pewność, że nie masz żadnych duplikatów w scalonej tablicy, Imho powinieneś sam zająć się sprawą.

Także jeśli masz zamiar scalić tablice wielowymiarowe, należy rozważyć użycie array_merge_recursive () nad array_merge () .

Nikola Petkanski
źródło
4

spróbuj użyć array_unique()

eliminuje to zduplikowane dane z listy twoich tablic.

Jhonathan H.
źródło
0

Scalanie dwóch tablic nie usunie duplikatu. Możesz wypróbować poniższy przykład, aby uzyskać unikalność z dwóch tablic

$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);
kantsverma
źródło