Frage:
Legacy-Funktionen wie array_diff und array_udiff sind für den Vergleich von Arrays mit Skalarwerten konzipiert. Wie können wir den Unterschied zwischen zwei Arrays von Objekten ermitteln, die wir anhand eines bestimmten Eigenschaftswerts vergleichen möchten?
Lösung:
Glücklicherweise kann array_udiff genutzt werden um dieser Anforderung gerecht zu werden. Wir definieren eine benutzerdefinierte Vergleichsfunktion, die sich auf die gewünschte Eigenschaft konzentriert, und verwenden dann array_udiff, um den Unterschied zwischen den beiden Arrays zu bestimmen.
Betrachten Sie die folgenden Beispielarrays:
<code class="php">$array1 = array( (object) ['id' => '205', 'day_id' => '12'], ... ); $array2 = array( (object) ['id' => '205', 'day_id' => '13'], ... );</code>
Unser Ziel ist um die Unterschiede zwischen diesen Arrays anhand der ID-Eigenschaft zu identifizieren. Um dies zu erreichen, können wir eine Vergleichsfunktion erstellen:
<code class="php">function compare_objects($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; }</code>
Diese Funktion vergleicht die ID-Eigenschaft zweier Objekte und gibt die Differenz als Ganzzahl zurück. Anschließend verwenden wir array_udiff wie folgt:
<code class="php">$diff = array_udiff($array1, $array2, 'compare_objects');</code>
Alternativ können wir mit PHP 5.3 und höher eine anonyme Funktion zum Vergleich verwenden:
<code class="php">$diff = array_udiff($array1, $array2, function ($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } );</code>
Diese Lösung berechnet effektiv die Differenz zwischen zwei Arrays von Objekten durch Vergleich des angegebenen Eigenschaftswerts. Das resultierende $diff-Array enthält Objekte, die die eindeutigen Elemente von entweder $array1 oder $array2 basierend auf den Vergleichskriterien darstellen.
Das obige ist der detaillierte Inhalt vonWie kann der Unterschied zwischen Objektarrays durch Vergleich spezifischer Eigenschaftswerte ermittelt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!