Die Funktion in_array kann nicht verglichen werden Objekte.
Sie sollten eindeutige Schlüssel-Wert-Paare aus Ihren Objekten erstellen und diese nur vergleichen, wenn Sie ein neues Objekt in Ihr endgültiges Array einfügen.
Unter der Annahme, dass jedes Objekt eine eindeutige id
-Eigenschaft hat, wäre eine mögliche Lösung:
Sie können einen strikten Vergleich verwenden:
%Vor%Anwendungsbeispiel:
%Vor%Ich weiß nicht, ob es wegen einer neueren PHP-Version ist, aber in meinem Projekt mit PHP 5.3.16 unter Ubuntu 12.04 funktionierte es. Es hat das Nadelobjekt in meinem Array von Objekten gefunden. Ich habe auch überprüft, indem ich ein anderes Objekt der gleichen Klasse geladen habe und es gegen den Array-Inhalt getestet habe, der dieses Objekt nicht enthielt, und es gab tatsächlich False zurück.
Also ja, in_array
kann Objekte vergleichen.
Ich habe mir eine etwas andere, etwas robustere Option ausgedacht.
%Vor%Der Vorteil für diese Lösung ist, dass sie einen benutzerdefinierbaren Rückruf für die Handhabung von Kollisionen enthält. Wenn Sie eindeutige Objekte hinzufügen, möchten Sie möglicherweise die Eigenschaften des alten und des neuen Objekts beibehalten.
Der Rückruf, bei dem es sich um eine anonyme Funktion handeln kann, empfängt sowohl das neue Objekt als auch das vorhandene Objekt, sodass der Benutzer eine benutzerdefinierte Berechnung durchführen kann. Geben Sie true zurück, um das vorhandene Objekt einfach zu ersetzen, oder geben Sie ein neues Objekt (nicht bool) zurück, um es zu ersetzen.
Ich kenne die Leistung von großen Datasets jedoch nicht.
Es gibt zahlreiche Möglichkeiten, wie Sie dies tun können, wie Sie sehen können. Ich dachte nur, ich würde noch eins hinzufügen. Ich weiß nicht warum, aber wenn ich mit Objekt-Arrays arbeite, benutze ich gerne die Array-Funktionen, die Callbacks verwenden.
Wenn Ihre Objekte irgendeine Art von Bezeichner haben, was sie tun sollten, wenn Sie sie für die Duplizierung testen möchten, funktioniert Folgendes:
%Vor% $object
ist das Objekt, nach dem Sie suchen, und $uniqueObjects
ist das Array von Objekten, nach denen Sie suchen, wenn es existiert. Passen Sie uniqueObject und object nur an eine identifizierende Eigenschaft an, z. B. id
.
Tags und Links php