2011-11-23 9 views
10

Quiero filtrar una matriz, utilizando la función array_filter. Sugiere usar call_user_func bajo el agua, pero no menciona nada sobre cómo usarlo dentro del contexto de una clase/objeto.Array_filter en el contexto de un objeto, con devolución de llamada privada

Algunos pseudocódigo para explicar mi objetivo:

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

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

Se lo necesite cambiar 'filter_item' en array($this, 'filter_item')? Es lo que quiero posible en absoluto?

Respuesta

36

Sí:

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

Ver la documentation for the callback type.

+0

¡Excelente información! Si está utilizando métodos estáticos, deberá pasar el nombre de la clase con la función de filtro. Para hacer esto, puede reemplazar 'array ($ this, 'filter_item')' con 'array (__ CLASS__, 'filter_item')'. –

+0

¿Se llamará al método filter_item() en el objeto que llama a array_filter(), o en cada objeto en $ this-> get_docs()? – Arild

+1

@Arild Esencialmente, se llamará a '$ this-> filter_item ($ doc)' para cada elemento devuelto por 'get_docs()'. – deceze

Cuestiones relacionadas