比较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的,如果对象相同,我可以做一个==
——答案是肯定的吗