PHP - Unione di due array in un array (anche Rimuovi duplicati)


109

Ciao, sto cercando di unire due array e voglio anche rimuovere i valori duplicati dall'array finale.

Ecco il mio array 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
)

E questo è il mio array 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

)

Sto usando array_mergeper unire entrambi gli array in un array. sta dando un output come questo

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

)

Voglio rimuovere queste voci duplicate o posso rimuoverle prima di unirle ... Per favore, aiuto .. Grazie !!!!!!!


Perché vuoi unire $ array1 [0] e $ array2 [0] non $ array1 e $ array2. Prova a eseguire array_merge sul primo elemento di ogni array
Bgi

array è dinamico .. quindi non sarà sempre $ array1 [0] e $ array2 [0]
Ravi

c'è qualcosa con cui posso confrontare l'ID di ogni oggetto all'interno di un array ???
Ravi

1
Dimentica il mio primo commento che non funzionerà perché ciò che stai cercando di unire non sono array ma oggetti. Devi farlo manualmente
Bgi

Risposte:


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

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


5
@ Hemantxp> senza SORT_REGULAR dà questo errore:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi

4
Vale la pena notare che array_unique restituisce l'array filtrato (invece di agire direttamente sul parametro dell'array passato), quindi è necessario memorizzare il risultato prima di poterlo utilizzare
Mike

7
Per impostazione predefinita, array_unique cerca di utilizzare i valori dell'array come stringhe. Da qui l'errore in cui si è imbattuto @Ravi. Se il tuo array è composto solo da stringhe, non hai bisogno del terzo argomento. Se non è una stringa o non è possibile eseguire il cast implicito del contenuto in una stringa, sarà necessario l'argomento SORT_REGULAR.
David Baucum

@ Hemantwagh07 Per gli oggetti array, se non utilizziamo l'utente SORT_REGULARfornisceRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
mapmalith

7

Unirà due array e rimuoverà i duplicati

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

Prova questo link link1


7

Come già accennato, array_unique () potrebbe essere utilizzato, ma solo quando si tratta di dati semplici. Gli oggetti non sono così semplici da maneggiare.

Quando php cerca di unire gli array, prova a confrontare i valori dei membri dell'array. Se un membro è un oggetto, non può ottenere il suo valore e utilizza invece l'hash spl. Maggiori informazioni su spl_object_hash qui.

Detto semplicemente se hai due oggetti, istanze della stessa classe e se uno di loro non è un riferimento all'altro, finirai per avere due oggetti, indipendentemente dal valore delle loro proprietà.

Per essere sicuro di non avere duplicati all'interno dell'array unito, Imho dovresti gestire il caso da solo.

Inoltre, se hai intenzione di unire array multidimensionali, considera l'utilizzo di array_merge_recursive () su array_merge () .


4

prova a usare il array_unique()

questo elimina i dati duplicati all'interno dell'elenco dei tuoi array ..


0

L'unione di due array non rimuoverà il duplicato, puoi provare l'esempio seguente per ottenere univoco da due array

$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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.