2017-03-15 4 views
0

Ich versuche, zwei Objekte zu vergleichen, um zu sehen, ob sie gleich sind. Währenddessen muss ich eine der Eigenschaften ignorieren.Vergleichen Sie zwei Objekte mit Ausnahme einer Eigenschaft? php

Dies ist mein aktueller Code:

$exists = array_filter($this->products, function($stored, $key) use ($item) { 
    return ($stored == $item); 
}, ARRAY_FILTER_USE_BOTH); 

Dies wird die Objekte gleich sind vollständig vergleichen. Ich muß vorübergehend eine Eigenschaft von quantity von $stored

+0

'unset ($ gespeichert-> Menge)' – Ahmad

+1

'return ($ key == 'quantity') || ($ stored == $ item); ' – AbraCadaver

Antwort

0

entfernen Da dies eine Reihe von Objekten ist, wenn Sie unset Eigenschaften von ihnen, wird es nicht die Eigenschaften nur im Rahmen von array_filter nicht gesetzt. Da das Array object identifiers enthält, werden die Eigenschaften aus den Objekten in $this->products tatsächlich entfernt. Wenn Sie temporär eine Eigenschaft für den Vergleich entfernen möchten, speichern Sie eine Kopie davon vor dem Unscharfschalten, dann führen Sie Ihren Vergleich, dann fügen Sie es zurück zum Objekt, bevor Sie das Ergebnis des Vergleichs zurückgeben.

Eine andere Möglichkeit besteht darin, das Objekt zu klonen und die Eigenschaft aus dem Klon zu entfernen. Abhängig davon, wie komplex das Objekt ist, ist dies möglicherweise nicht so effizient.

$exists = array_filter($this->products, function($stored, $key) use ($item) { 
    $temp = clone($stored); 
    unset($temp->quantity); 
    return $temp == $item; 
}, ARRAY_FILTER_USE_BOTH); 
Verwandte Themen