PHP - Mesclando dois arrays em um array (também remover duplicatas)

109

Oi, estou tentando mesclar duas matrizes e também quero remover valores duplicados da matriz final.

Aqui está meu 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 este é meu 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

)

Estou usando array_mergepara mesclar as duas matrizes em uma única matriz. está dando uma saída como esta

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

)

Quero remover essas entradas duplicadas ou posso removê-las antes de mesclar ... Por favor, ajudem ... Obrigado !!!!!!!

Ravi
fonte
Porque você deseja mesclar $ array1 [0] e $ array2 [0], não $ array1 e $ array2. Tente executar array_merge no primeiro item de cada array
Bgi de
array é dinâmico .. então nem sempre será $ array1 [0] e $ array2 [0]
Ravi
há algo com o qual eu possa comparar o ID de cada objeto dentro de uma matriz ??
Ravi de
1
Esqueça meu primeiro comentário que não funcionará porque o que você está tentando mesclar não são matrizes, mas objetos. Você tem que fazer isso manualmente
Bgi de

Respostas:

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

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

CE
fonte
5
@ Hemantxp> sem SORT_REGULAR está apresentando este erro:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi
4
É importante notar que array_unique retorna a matriz filtrada (em vez de agir diretamente no parâmetro da matriz passada), então você precisa armazenar o resultado antes de usá-lo
Mike
7
Por padrão, array_unique tenta usar os valores do array como strings. Daí o erro que @Ravi encontrou. Se o seu array é apenas strings, você não precisa do terceiro argumento. Se não for uma string ou se o conteúdo não puder ser convertido implicitamente em uma string, você precisará do argumento SORT_REGULAR.
David Baucum
@ Hemantwagh07 Para objetos de matriz, se não o SORT_REGULARRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
usarmos
7

Ele irá fundir duas matrizes e remover duplicatas

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

Tente este link link1

Daxen
fonte
7

Como já mencionado, array_unique () pode ser usado, mas apenas ao lidar com dados simples. Os objetos não são tão simples de manusear.

Quando o php tenta mesclar os arrays, ele tenta comparar os valores dos membros do array. Se um membro for um objeto, ele não pode obter seu valor e usa o hash spl. Leia mais sobre spl_object_hash aqui.

Basta dizer se você tem dois objetos, instâncias da mesma classe e se um deles não é uma referência para o outro - você vai acabar tendo dois objetos, não importa o valor de suas propriedades.

Para ter certeza de que não há nenhuma duplicata na matriz mesclada, Imho você deve cuidar do caso sozinho.

Além disso, se você for fundir arrays multidimensionais, considere usar array_merge_recursive () em vez de array_merge () .

Nikola Petkanski
fonte
4

tente usar o array_unique()

isso elimina dados duplicados dentro da lista de seus arrays.

Jhonathan H.
fonte
0

Mesclar dois arrays não removerá a duplicata você pode tentar o exemplo abaixo para obter o único de dois arrays

$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
fonte