2013-12-11 122 views
2

我需要比較2個對象來刪除重複/找到新的輸入。比較2個對象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->somethingElse 
    etc 

我想象我可以循環一個對象數組,並比較$ db [$ key] - > username wit h另一個對象的內部循環$ ob [$ key] - >用戶名,但有更清晰的方式嗎?

我期待刪除重複

+1

如果有幫助,您還直接在數據庫上使用SQL進行數據刪除 – Popnoodles

回答

2

沒有,沒有清潔的方式,你必須遍歷所有的屬性。如果不是一個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刪除重複項,甚至更好地使用DB中的唯一鍵來避免重複項?

+0

謝謝,它們不是stdObjects –

+0

如果對象相同,我可以只做一個==嗎? –

+0

編號'equals'沒有特殊含義(與其他編程語言一樣),並且PHP不支持運算符重載。您需要明確調用該方法。 – hek2mgl