Nesnelerin dizileri karşılaştırma

0 Cevap php

Ben PHP nesnelerin diziler karşılaştıran bir özlü yol arıyorum. Ben sadece ikinci dizideki her nesne için arayan bir dizi aracılığıyla eşit boyutlu diziler için kontrol edin ve daha sonra döngü olabileceğini biliyorum, ama dizi karşılaştırma işlevlerden birini veya daha fazlasını kullanmak için daha güzel olacağını düşündüm.

Ben nesneleri ve ben karşı geliyorum asıl sorun dizi karşılaştırma fonksiyonları bu gibi strings gibi öğeleri karşılaştırarak ısrar etmesi bir kaç dizi test ettik:

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);

çıkışlar

Array
(
[1] => Foo Object
    (
        [pk] => 2
    )

[2] => Foo Object
    (
        [pk] => 3
    )

[3] => Foo Object
    (
        [pk] => 4
    )

)

Bu __toString() yöntemleri, benzersiz bir tanımlayıcı asla dönmek ve '' if nesneler __toString() yöntemler varsa ve bu iyi.

Ama bu durumda değilse ne olur, böyle bir nesne için söylüyor:

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);
    }

}

Bunu yapmak array_uintersect($arr1,$arr2,$somecallback) Bunun kullanımını zorlar Foo::Equals()? Mümkün mü Görebildiğim kadarıyla string geri arama önce olur dönüşüm denir.

Herhangi bir fikir bu nasıl etrafında almak için?

0 Cevap