PHP получает разницу между двумя массивами объектов

Я знаю, что есть array_diff и array_udiff для сравнения разницы между двумя массивами, но как бы это сделать с двумя массивами объектов?

 array(4) { [0]=> object(stdClass)#32 (9) { ["id"]=> string(3) "205" ["day_id"]=> string(2) "12" } } 

Мои массивы подобны этому, мне интересно увидеть разницу в двух массивах на основе идентификаторов.

Это именно то, что для array_udiff . Напишите функцию, которая сравнивает два объекта так, как вам хотелось бы, а затем сообщите array_udiff чтобы использовать эту функцию. Что-то вроде этого:

 function compare_objects($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } $diff = array_udiff($first_array, $second_array, 'compare_objects'); 

Или, если вы используете PHP> = 5.3, вы можете просто использовать анонимную функцию вместо объявления функции:

 $diff = array_udiff($first_array, $second_array, function ($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } ); 

Вот еще один вариант, если вы хотите запустить diff в соответствии с экземплярами объекта. Вы использовали бы это как ваш обратный вызов для array_udiff :

 function compare_objects($a, $b) { return strcmp(spl_object_hash($a), spl_object_hash($b)); } 

Вы только хотели бы использовать это, если вы уверены, что в массивах содержатся только объекты – вот мой личный прецедент .

И вот еще один вариант, если вы хотите сравнить свойства строки (например, имя):

 $diff = array_udiff($first_array, $second_array, function ($obj_a, $obj_b) { return strcmp($obj_a->name, $obj_b->name); } );