Как организовать поиск пересечения массивов объектов с пользовательской функцией?

Стоит задача - сравнить два массива с объектами и вернуть массив объектов, которые совпадают по определенным свойствам. Очевидно, надо использоваться 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). Что за дела? Как реализуется то что мне нужно?
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы