Мне нужно сравнить 2 объекта, чтобы удалить дубликаты / найти новые enteries.
Объекты не идентичны, но они содержат один и тот же ключ имени пользователя
Вот макет
объект базы данных
array [0]db->username [0]db->something [1]db->username [1]db->something etc
другой объект
array [0]ob->username [0]ob->somethingElse [1]ob->username [1]ob->somethingElse etc
Я предполагаю, что я могу закодировать один массив объектов и сравнить $ db [$ key] -> имя пользователя с внутренним циклом другого объекта $ ob [$ key] -> username, но есть ли более чистый способ?
Я хочу удалить дубликаты
Нет, нет более чистого способа, вам нужно перебрать свойства. Если это не объекты StdClass, я бы добавил в свой класс собственный метод сравнения:
class Person { protected $id; protected $name; protected $age; /** * Compares two persons an returns true if their name * and age equals. */ public function equals(Person $b) { if($b->name === $this->name && $b->age === $this->age) { return TRUE; } return FALSE; } }
Затем используйте его следующим образом:
$personA = DB::getPersonById(1); $personB = DB::getPersonById(2); if($personA->equals($personB)) { echo "They are equal"; }
Однако, помимо этого, почему бы просто не удалять дубликаты с использованием SQL или даже лучше использовать уникальные ключи в БД, чтобы избежать дублирования вообще?