PHP in_array Objektvergleich?

7

Kann die Funktion in_array Objekte vergleichen?

Ich habe zum Beispiel ein Array von Objekten und möchte sie einem anderen Array hinzufügen. Ist es möglich, zu prüfen, ob ein Objekt bereits hinzugefügt wurde:

%Vor%

oder gibt es einen anderen Weg?

    
gorgi93 21.06.2013, 09:33
quelle

7 Antworten

10

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:

%Vor%     
ukliviu 21.06.2013, 10:30
quelle
11

Sie können einen strikten Vergleich verwenden:

%Vor%

Anwendungsbeispiel:

%Vor%     
Alain Tiemblo 22.01.2015 21:19
quelle
3

Siehe Ссылка

%Vor%

Prost

    
smassey 21.06.2013 09:58
quelle
1

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.

    
Wouter Thielen 10.02.2015 09:18
quelle
0

Wenn "STRICT" "FALSE" ist, wird der Vergleich durchgeführt, indem die Elemente in einer Zeichenkette umgewandelt werden. Wenn Sie also die Magic-Funktion __toString überschreiben, sollten Sie die Objektelemente vergleichen können.

    
Justo 22.01.2015 23:54
quelle
0

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.

    
Kremnari 06.08.2015 15:59
quelle
0

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 .

    
Kristofer Doman 29.08.2017 15:27
quelle

Tags und Links