起初我想说我是PHP新手。检查数组中是否存在对象
我有一个实现,检查一个对象是否在数组或不,如果不添加另一个数组。但它总是返回false,并添加到数组中。
我该如何解决?代码
以下部分:
$temp = new tempClass($x, $y);
if (!in_array($temp, $temp_array)) {
$temp2_array[] = $temp;
}
起初我想说我是PHP新手。检查数组中是否存在对象
我有一个实现,检查一个对象是否在数组或不,如果不添加另一个数组。但它总是返回false,并添加到数组中。
我该如何解决?代码
以下部分:
$temp = new tempClass($x, $y);
if (!in_array($temp, $temp_array)) {
$temp2_array[] = $temp;
}
因为你是在阵列中增加的情况下,确保了阵列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;
}
我认为这是因为你正在检查数组中新对象的引用,而不是该对象的值。试试看:
print_r($temp_array);
看看你得到了什么......这应该给你一个如何解决它的想法。
正如你所说我创建了我自己的循环,但我再次得到相同的结果。这里是代码:function exists($ b,$ array){foreach($ array as $ a)if($ a-> x == $ b-> x)return true;返回false; } – Kaan 2009-08-08 18:08:49
然后我真的不知道该说什么。在我看来,你粘贴伪代码而不是你的代码,但你的问题在你的代码中。 if语句和大括号之间的分号可能是? – 2009-08-08 20:11:37