【问题标题】:Help with PHP array_filter function帮助 PHP array_filter 函数
【发布时间】:2011-09-11 19:10:27
【问题描述】:

扫描目录下的文件请看下面的函数(取自here

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

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

【问题讨论】:

    标签: php array-filter


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多