PHP: fusionar dos matrices en una matriz (también eliminar duplicados)

109

Hola, estoy tratando de fusionar dos matrices y también quiero eliminar valores duplicados de la matriz final.

Aquí está mi 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
)

Y esta es mi matriz 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

)

Estoy usando array_mergepara fusionar ambas matrices en una matriz. está dando una salida 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

)

Quiero eliminar estas entradas duplicadas o puedo eliminarlas antes de fusionarlas ... Por favor, ayúdenme ... ¡¡¡¡¡Gracias !!!!!!!

Ravi
fuente
Porque quieres fusionar $ matriz1 [0] y $ matriz2 [0] no $ matriz1 y $ matriz2. Intente ejecutar array_merge en el primer elemento de cada matriz
Bgi
array es dinámico ... por lo que no siempre será $ array1 [0] y $ array2 [0]
Ravi
¿Hay algo con lo que pueda comparar la identificación de cada objeto dentro de una matriz?
Ravi
1
Olvida mi primer comentario que no funcionará porque lo que intentas fusionar no son matrices sino objetos. Tienes que hacerlo manualmente
Bgi

Respuestas:

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

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

CE
fuente
5
@ Hemantxp> sin SORT_REGULAR está dando este error:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi
4
Vale la pena señalar que array_unique devuelve la matriz filtrada (en lugar de actuar directamente sobre el parámetro de matriz pasado), por lo que debe almacenar el resultado antes de poder usarlo
Mike
7
De forma predeterminada, array_unique intenta utilizar los valores de la matriz como cadenas. De ahí el error que encontró @Ravi. Si su matriz es solo cadenas, entonces no necesita el tercer argumento. Si no es una cadena, o el contenido no se puede convertir implícitamente en una cadena, necesitará el argumento SORT_REGULAR.
David Baucum
@ Hemantwagh07 Para objetos de matriz, si no lo usamos SORT_REGULAR, daRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
mapmalith
7

Fusionará dos matrices y eliminará el duplicado

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

Prueba este enlace link1

Daxen
fuente
7

Como ya se mencionó, array_unique () podría usarse, pero solo cuando se trata de datos simples. Los objetos no son tan sencillos de manejar.

Cuando php intenta fusionar las matrices, intenta comparar los valores de los miembros de la matriz. Si un miembro es un objeto, no puede obtener su valor y usa el hash spl en su lugar. Lea más sobre spl_object_hash aquí.

Simplemente, si tienes dos objetos, instancias de la misma clase y si uno de ellos no es una referencia al otro, terminarás teniendo dos objetos, sin importar el valor de sus propiedades.

Para asegurarse de que no tiene ningún duplicado dentro de la matriz combinada, en mi opinión, debe manejar el caso por su cuenta.

Además, si va a fusionar matrices multidimensionales, considere usar array_merge_recursive () sobre array_merge () .

Nikola Petkanski
fuente
4

intenta usar el array_unique()

esto elimina los datos duplicados dentro de la lista de sus matrices.

Jhonathan H.
fuente
0

La combinación de dos matrices no eliminará el duplicado, puede probar el siguiente ejemplo para obtener una matriz única de dos

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