Стоит задача - сравнить два массива с объектами и вернуть массив объектов, которые совпадают по определенным свойствам. Очевидно, надо использоваться array_uintersect с пользовательской функцией сравнения.
Написал простейший пример, как я это реализую (в реальном случае еще есть много свойств, которые у объектов не совпадают, но я сравниваю именно по двум нужным):
class Some {
public $prop1;
public $prop2;
public function __construct($prop1, $prop2)
{
$this->prop1 = $prop1;
$this->prop2 = $prop2;
}
}
$arr1 = [new Some(1, 2), new Some(2, 3), new Some(3, 4)];
$arr2 = [new Some(2, 3), new Some(1, 2)];
$intersection = array_uintersect($arr1, $arr2, function ($el1, $el2) {
return ($el1->prop1 === $el2->prop1) && ($el1->prop2 === $el2->prop2) ? 0 : 1;
});
print_r($intersection);
Возвращается мне один элемент:
Array
(
[1] => Some Object
(
[prop1] => 2
[prop2] => 3
)
)
Хотя должны вернуться два (комбинации (1, 2) и (2, 3). Что за дела? Как реализуется то что мне нужно?