PHP - Zusammenführen von zwei Arrays zu einem Array (auch Duplikate entfernen)


109

Hallo, ich versuche zwei Arrays zusammenzuführen und möchte auch doppelte Werte aus dem endgültigen Array entfernen.

Hier ist mein 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
)

Und das ist mein 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

)

Ich verwende array_mergezum Zusammenführen beider Arrays zu einem Array. es gibt eine Ausgabe wie diese

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

)

Ich möchte diese doppelten Einträge entfernen oder kann ich diese vor dem Zusammenführen entfernen ... Bitte helfen Sie .. Danke !!!!!!!


Weil Sie $ array1 [0] und $ array2 [0] zusammenführen möchten, nicht $ array1 und $ array2. Versuchen Sie, array_merge für das erste Element jedes Arrays
auszuführen

Array ist dynamisch .. so wird es nicht immer $ array1 [0] und $ array2 [0]
Ravi

Gibt es etwas, mit dem ich die ID jedes Objekts in einem Array vergleichen kann?
Ravi

1
Vergessen Sie meinen ersten Kommentar, der nicht funktioniert, denn Sie versuchen, keine Arrays, sondern Objekte zusammenzuführen. Sie müssen es manuell tun
Bgi

Antworten:


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

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


5
@ Hemantxp> ohne SORT_REGULAR gibt es diesen Fehler:Catchable fatal error: Object of class stdClass could not be converted to string
Ravi

4
Es ist erwähnenswert, dass array_unique das gefilterte Array zurückgibt (anstatt direkt auf den übergebenen Array-Parameter einzuwirken), sodass Sie das Ergebnis speichern müssen, bevor Sie es verwenden können
Mike

7
Standardmäßig versucht array_unique, die Array-Werte als Zeichenfolgen zu verwenden. Daher ist der Fehler @Ravi aufgetreten. Wenn Ihr Array nur aus Zeichenfolgen besteht, benötigen Sie das dritte Argument nicht. Wenn es sich nicht um eine Zeichenfolge handelt oder der Inhalt nicht implizit in eine Zeichenfolge umgewandelt werden kann, benötigen Sie das Argument SORT_REGULAR.
David Baucum

@ Hemantwagh07 Für Array-Objekte, wenn wir nicht verwenden SORT_REGULAR, gibt esRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
Mapmalith

7

Es werden zwei Arrays zusammengeführt und Duplikate entfernt

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

Versuchen Sie diesen Link link1


7

Wie bereits erwähnt, array_unique () verwendet werden, jedoch nur, wenn es sich um einfache Daten handelt. Die Objekte sind nicht so einfach zu handhaben.

Wenn PHP versucht, die Arrays zusammenzuführen, versucht es, die Werte der Array-Mitglieder zu vergleichen. Wenn ein Mitglied ein Objekt ist, kann es seinen Wert nicht abrufen und verwendet stattdessen den Spl-Hash. Lesen Sie hier mehr über spl_object_hash.

Einfach gesagt, wenn Sie zwei Objekte haben, Instanzen derselben Klasse, und wenn eines davon kein Verweis auf das andere ist, erhalten Sie am Ende zwei Objekte, unabhängig vom Wert ihrer Eigenschaften.

Um sicherzugehen, dass Sie keine Duplikate innerhalb des zusammengeführten Arrays haben, sollten Sie den Fall imho selbst behandeln.

Auch wenn Sie vorhaben , mehrdimensionale Arrays zu verbinden, sollten Sie mit array_merge_recursive () über array_merge () .


4

versuche das zu benutzen array_unique()

Dadurch werden doppelte Daten in der Liste Ihrer Arrays entfernt.


0

Durch das Zusammenführen von zwei Arrays wird das Duplikat nicht entfernt. Im folgenden Beispiel können Sie versuchen, aus zwei Arrays eindeutig zu werden

$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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.