我正在寻找一种比较 PHP 中对象数组的简洁方法。我知道我可以只检查大小相等的数组,然后循环遍历一个数组,查找第二个数组中的每个对象,但我认为使用一个或多个数组比较函数会更好。
我已经测试了几个对象数组,我遇到的主要问题是数组比较函数坚持将元素进行比较strings
, 像这样:
class Foo{
public $pk=NULL;
function __construct($pk){
$this->pk=$pk;
}
function __toString(){
return (string)$this->pk;//even an integer must be cast or array_intersect fails
}
}
for($i=1;$i<7;$i++){
$arr1[]=new Foo($i);
}
for($i=2;$i<5;$i++){
$arr2[]=new Foo($i);
}
$int=array_intersect($arr1,$arr2);
print_r($int);
outputs
Array
(
[1] => Foo Object
(
[pk] => 2
)
[2] => Foo Object
(
[pk] => 3
)
[3] => Foo Object
(
[pk] => 4
)
)
如果对象有就好了__toString()
方法以及如果那些__toString()
方法返回一个唯一的标识符,并且从不返回''
.
但如果情况并非如此,会发生什么,比如对于这样的对象:
class Bar{
public $pk=NULL;
function __construct($pk){
$this->pk=$pk;
}
function __toString(){
return 'I like candy.';//same for all instances
}
function Equals(self $other){
return ($this->pk==$other->pk);
}
}
是否可以做array_uintersect($arr1,$arr2,$somecallback)
这迫使使用Foo::Equals()
?从我可以看到转换为string
发生在调用回调之前。
有什么想法可以解决这个问题吗?