PHP - Fusion de deux tableaux en un seul tableau (également supprimer les doublons)


109

Salut, j'essaie de fusionner deux tableaux et je souhaite également supprimer les valeurs en double du tableau final.

Voici mon tableau 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
)

Et voici mon tableau 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

)

J'utilise array_mergepour fusionner les deux tableaux en un seul tableau. il donne une sortie comme celle-ci

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

)

Je veux supprimer ces entrées en double ou puis-je les supprimer avant de fusionner ... Veuillez aider .. Merci !!!!!!!


Parce que vous voulez fusionner $ array1 [0] et $ array2 [0] pas $ array1 et $ array2. Essayez d'exécuter array_merge sur le premier élément de chaque tableau
Bgi

array est dynamique .. donc il ne sera pas toujours $ array1 [0] et $ array2 [0]
Ravi

y a-t-il quelque chose avec lequel je peux comparer l'ID de chaque objet à l'intérieur d'un tableau ???
Ravi

1
Oubliez mon premier commentaire qui ne fonctionnera pas car ce que vous essayez de fusionner ne sont pas des tableaux mais des objets. Vous devez le faire manuellement
Bgi

Réponses:


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

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


5
@ Hemantxp> sans SORT_REGULAR, il donne cette erreur:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi

4
Il est intéressant de noter que array_unique renvoie le tableau filtré (plutôt que d'agir directement sur le paramètre de tableau transmis), vous devez donc stocker le résultat avant de pouvoir l'utiliser
Mike

7
Par défaut, array_unique essaie d'utiliser les valeurs du tableau comme des chaînes. D'où l'erreur rencontrée par @Ravi. Si votre tableau ne contient que des chaînes, vous n'avez pas besoin du troisième argument. S'il ne s'agit pas d'une chaîne ou si le contenu ne peut pas être implicitement converti en chaîne, vous aurez besoin de l'argument SORT_REGULAR.
David Baucum

@ Hemantwagh07 Pour les objets de tableau, si nous ne l'utilisons pas, SORT_REGULARcela donneRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
mapmalith

7

Il fusionnera deux tableaux et supprimera les doublons

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

Essayez ce lien link1


7

Comme déjà mentionné, array_unique () pourrait être utilisé, mais uniquement lorsqu'il s'agit de données simples. Les objets ne sont pas si simples à manipuler.

Lorsque php essaie de fusionner les tableaux, il essaie de comparer les valeurs des membres du tableau. Si un membre est un objet, il ne peut pas obtenir sa valeur et utilise le hachage spl à la place. En savoir plus sur spl_object_hash ici.

Simplement dit si vous avez deux objets, des instances de la même classe et si l'un d'eux n'est pas une référence à l'autre - vous finirez par avoir deux objets, quelle que soit la valeur de leurs propriétés.

Pour être sûr que vous n'avez pas de doublons dans le tableau fusionné, Imho vous devez gérer le cas vous-même.

De plus, si vous envisagez de fusionner des tableaux multidimensionnels, envisagez d'utiliser array_merge_recursive () sur array_merge () .


4

essayez d'utiliser le array_unique()

cela élimine les données dupliquées dans la liste de vos tableaux.


0

La fusion de deux tableaux ne supprimera pas le doublon, vous pouvez essayer l'exemple ci-dessous pour obtenir l'unicité de deux tableaux

$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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.