2011-09-11 10 views
6

Xin vui lòng xem chức năng sau đây để quét các tập tin trong một thư mục (Trích từ here)Trợ giúp với chức năng PHP array_filter

function scandir_only_files($dir) { 
    return array_filter(scandir($dir), function ($item) { 
     return is_file($dir.DIRECTORY_SEPARATOR.$item); 
    }); 
} 

này không làm việc vì $ dir không nằm trong phạm vi trong chức năng ẩn danh, và hiển thị trống, khiến bộ lọc trả về FALSE mỗi lần. Làm thế nào tôi sẽ viết lại điều này?

Trả lời

15

Bạn cần phải khai báo tường minh được thừa kế từ phạm vi phụ huynh, với từ khóa use:

// use the `$dir` variable from the parent scope 
function ($item) use ($dir) { 

function scandir_only_files($dir) { 
    return array_filter(scandir($dir), function ($item) use ($dir) { 
     return is_file($dir.DIRECTORY_SEPARATOR.$item); 
    }); 
} 

Xem this example từ chức năng ẩn danh trang.

Các đóng cửa có thể kế thừa các biến từ phạm vi gốc. Bất kỳ biến nào như vậy phải được khai báo trong tiêu đề hàm. Phạm vi cha của một đóng là hàm mà trong đó việc đóng được khai báo (không nhất thiết là hàm mà nó được gọi).

+0

+1 để sử dụng 'use' – tttony

+0

@ arnaud- awesome- vừa học được điều gì đó mới mẻ! – Yarin