2009-08-08 55 views
2

起初我想說我是PHP新手。檢查數組中是否存在對象

我有一個實現,檢查一個對象是否在數組或不,如果不添加另一個數組。但它總是返回false,並添加到數組中。

我該如何解決?代碼

以下部分:

$temp = new tempClass($x, $y); 

    if (!in_array($temp, $temp_array)) { 
      $temp2_array[] = $temp; 
    } 

回答

8

因爲你是在陣列中增加的情況下,確保了陣列in_array()採用嚴格的模式比較:

$temp = new tempClass($x, $y); 

if (!in_array($temp, $temp_array, true)) { 
    $temp2_array[] = $temp; 
} 

此外,您還需要了解一個類的兩個不同的實例,即使它們擁有相同的數據,仍然是兩個不同的實例。如果你知道兩個實例是否相同,你需要創建你自己的循環並手動比較你的實例。

您可以省略嚴格模式,它將比較類的成員,但只要您有不同的成員,它將是不相等的。

$temp = new tempClass($x, $y); 

if (!in_array($temp, $temp_array)) { 
    $temp2_array[] = $temp; 
} 
+0

正如你所說我創建了我自己的循環,但我再次得到相同的結果。這裏是代碼:function exists($ b,$ array){foreach($ array as $ a)if($ a-> x == $ b-> x)return true;返回false; } – Kaan 2009-08-08 18:08:49

+0

然後我真的不知道該說什麼。在我看來,你粘貼僞代碼而不是你的代碼,但你的問題在你的代碼中。 if語句和大括號之間的分號可能是? – 2009-08-08 20:11:37

0

我認爲這是因爲你正在檢查數組中新對象的引用,而不是該對象的值。試試看:

print_r($temp_array); 

看看你得到了什麼......這應該給你一個如何解決它的想法。