2011-11-23 16 views
10

Diziyi, array_filter işlevini kullanarak filtrelemek istiyorum. Su altında call_user_func kullanarak ipuçları, ancak bir sınıf/nesne bağlamında nasıl kullanılacağı hakkında bir şey bahsetmez.Array_filter, bir nesne bağlamında, özel geri bildirime sahip

Bazı yalancı kod amacıma açıklamaya:

class RelatedSearchBlock { 
    //... 
    private function get_filtered_docs() { 
    return array_filter($this->get_docs(), 'filter_item'); 
    } 

    private filter_item() { 
    return ($doc->somevalue == 123) 
    } 
} 

ben array($this, 'filter_item') içine 'filter_item' değiştirmek gerekir? İstediğim şey mümkün mü?

cevap

36

Evet:

return array_filter($this->get_docs(), array($this, 'filter_item')); 

documentation for the callback type bakınız.

+0

Harika bilgi! Statik yöntemler kullanıyorsanız, filtre fonksiyonu ile sınıf ismini geçmeniz gerekecektir. Bunu yapmak için diziyi ($ this, 'filter_item') 'dizisi ile değiştirebilirsiniz (__ CLASS__, 'filter_item')'. –

+0

filter_item() yöntemi, array_filter() işlevini çağıran nesnede mi, yoksa $ this-> get_docs()? – Arild

+1

@Arild Esasen, '$ this-> filter_item ($ doc)', get_docs() 'dan döndürülen her öğe için çağrılır. – deceze

İlgili konular