2011-11-23 26 views
10

Tôi muốn lọc một mảng, sử dụng hàm array_filter. Nó gợi ý bằng cách sử dụng call_user_func dưới nước, nhưng không đề cập đến bất cứ điều gì về cách sử dụng trong ngữ cảnh của một lớp/đối tượng.Array_filter trong ngữ cảnh của một đối tượng, với gọi lại riêng

Một số giả để giải thích mục tiêu của tôi:

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

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

Liệu tôi có cần phải thay đổi 'filter_item' vào array($this, 'filter_item')? Là những gì tôi muốn có thể ở tất cả?

Trả lời

36

Có:

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

Xem documentation for the callback type.

+0

Thông tin tuyệt vời! Nếu bạn đang sử dụng các phương thức tĩnh, bạn sẽ phải chuyển tên lớp với hàm lọc. Để làm điều này, bạn có thể thay thế 'mảng ($ this, 'filter_item')' bằng 'mảng (__ CLASS__, 'filter_item')'. –

+0

Phương thức filter_item() có được gọi trên đối tượng gọi array_filter() hoặc trên mỗi đối tượng trong $ this-> get_docs()? – Arild

+1

@Arild Về bản chất, '$ this-> filter_item ($ doc)' sẽ được gọi cho mỗi mục được trả về từ 'get_docs()'. – deceze

Các vấn đề liên quan