帮助PHP array_filter函数

时间:2011-09-11 19:10:28

标签: php array-filter

请参阅以下功能以扫描目录中的文件(取自here

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

这不起作用,因为$ dir不在匿名函数的范围内,并且显示为空,导致过滤器每次都返回FALSE。我该怎么改写这个?

1 个答案:

答案 0 :(得分:15)

您必须使用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);
   });
}

请参阅匿名函数页面中的this example

  

闭包可以从父作用域继承变量。必须在函数头中声明任何此类变量。闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数)。