Ben nesne dizisi için array_intersect nasıl bilmek istiyorum.
güzel toString işlevi zaten uygulanan ve serialize denir ;) böylece
array_map('unserialize', array_intersect(array_map('serialize', $obj1), array_map('serialize', $obj2)) );
Birisi de belirtildiği gibi çalışma tek dizeleri ile Array_Intersect 'neden çalışmıyor yüksek belirtilen çalışma, örnek yapacak
Bu cevaplar doğru yolda ise, bir kaç gün önce benzer bir sorun vardı; Ben şu çalışmak için kullanmıştır:
Artefacto cevabı dan return $obj1 == $obj2
gerçekten işe, bu yüzden basit bir karşılaştırma fonksiyonu (temelde serileştirilmiş nesne md5 alır ve karşılaştırır) yazdı etmedi:
function object_compare($obj1, $obj2){
$md5 = function($obj){
return md5(serialize($obj));
};
return strcmp($md5($obj1), $md5($obj2));
}
Sonra kavşak almak için karşılaştırmalı fonksiyonu ile array_uintersect çağıran bir madde çıkıntı oluyor:
# $array1 / $array2 are the array of objects we want to compare
return array_uintersect($array1, $array2, 'object_compare');
Benim durumumda, ben nesnelerin bilinmeyen / dinamik dizi vardı, bu yüzden ben bu yüzden ben özellikle array_uintersect($array1, $array2, ...)
bildirmek zorunda değilsiniz bunu bir adım ileri götürdü - (ama sadece diziler bir dizi geçmek mümkün Nesnelerin):
# $multiarray_of_objects is our array of arrays
$multiarray_of_objects[] = 'object_compare';
return call_user_func_array('array_uintersect', $multiarray_of_objects);
Sadece lazım dizideki son dizesi olarak geri arama / karşılaştırmalı işlevi referans geçmek hatırlıyorum. Bir cazibe gibi çalışır!