2009-08-08 68 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); 

看看你得到了什么......这应该给你一个如何解决它的想法。