2011-11-23 17 views
10

Chcę filtrować tablicę, używając funkcji array_filter. Wskazuje na używanie call_user_func pod wodą, ale nie wspomina nic o tym, jak używać w kontekście klasy/obiektu.Array_filter w kontekście obiektu, z prywatnym oddzwonieniem

Niektóre pseudokod wyjaśnić mój cel:

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

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

Czy muszę zmienić 'filter_item' do array($this, 'filter_item')? Czy to w ogóle jest możliwe?

Odpowiedz

36

Tak:

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

Zobacz documentation for the callback type.

+0

Świetne informacje! Jeśli używasz metod statycznych, musisz podać nazwę klasy za pomocą funkcji filtru. Aby to zrobić, możesz zamienić 'array ($ this, 'filter_item')' na 'array (__ CLASS__, 'filter_item')'. –

+0

Czy metoda filter_item() zostanie wywołana na obiekcie wywołującym array_filter() lub na każdym obiekcie w $ this-> get_docs()? – Arild

+1

@Arild Zasadniczo, '$ this-> filter_item ($ doc)' zostanie wywołane dla każdej pozycji zwróconej przez 'get_docs()'. – deceze

Powiązane problemy