PHP中array_filter函数的使用帮助

7
请查看以下函数,该函数用于扫描目录中的文件(取自这里
function scandir_only_files($dir) {
   return array_filter(scandir($dir), function ($item) {
       return is_file($dir.DIRECTORY_SEPARATOR.$item);
   });
}

这段代码无法正常工作,因为$dir变量在匿名函数中不在作用域内,导致过滤器每次都返回FALSE。如何重写这段代码呢?

1个回答

16

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

请参考匿名函数页面上的这个示例。

闭包可以从父作用域继承变量。这些变量必须在函数头部声明。闭包的父作用域是它被声明的函数(不一定是调用它的函数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接