比较PHP中的两个对象

比较PHP中的两个对象,php,Php,我需要比较两个对象以删除重复项/查找新条目 这些对象不完全相同,但它们包含相同的用户名密钥 这是布局图 数据库对象 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->so

我需要比较两个对象以删除重复项/查找新条目

这些对象不完全相同,但它们包含相同的用户名密钥

这是布局图

数据库对象

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]->username与另一个对象$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删除重复项,或者更好地使用数据库中的唯一键来避免重复项呢?

如果有帮助,您也可以使用SQL直接在数据库中删除重复项。如果对象相同,我可以只执行==?否。
equals
没有特殊意义(就像在其他编程语言中一样)PHP不支持运算符重载。实际上,在PHP5中,
==
操作符确实可以处理对象
A==B
iff-typeof A==typeof B和A具有相同的属性B@hek2mgl-什么?这正是我所说的。如果运行
newa(1)==newa(1)
,则得到
true
,否则为false。另请参见。该评论指向@IvanRistic的
,如果对象相同,我可以做一个==
——答案是肯定的吗