我试图比较两个对象,看看它们是否相同。在这样做时,我需要忽略其中一个属性。
这是我目前的代码:
$exists = array_filter($this->products, function($stored, $key) use ($item) {
return ($stored == $item);
}, ARRAY_FILTER_USE_BOTH);
这将比较完全相同的对象。我需要暂时从quantity
$stored
的媒体资源
答案 0 :(得分:0)
由于这是一个对象的数组,如果你有unset
属性,它不会仅在array_filter
的上下文中取消设置属性。由于数组包含object identifiers,因此实际上会从$this->products
中的对象中删除属性。如果你想暂时删除一个属性进行比较,只需在取消设置之前保存它的副本,然后进行比较,然后在返回比较结果之前将其添加回对象。
$exists = array_filter($this->products, function($stored, $key) use ($item) {
$quantity = $stored->quantity; // keep it here
unset($stored->quantity); // temporarily remove it
$result = $stored == $item; // compare
$stored->quantity = $quantity; // put it back
return $result; // return
}, ARRAY_FILTER_USE_BOTH);
另一种可能性是克隆对象并从克隆中取消设置属性。根据对象的复杂程度,这可能效率不高。
$exists = array_filter($this->products, function($stored, $key) use ($item) {
$temp = clone($stored);
unset($temp->quantity);
return $temp == $item;
}, ARRAY_FILTER_USE_BOTH);