【问题标题】:Find file from name and array of extensions从名称和扩展名数组中查找文件
【发布时间】:2017-08-09 21:05:36
【问题描述】:

这对我有用:

if (file_exists($filename . '.mp4')) {
    $filepath = "$filename.mp4";
} elseif (file_exists($filename . '.avi')) {
    $filepath = "$filename.avi";
} elseif (file_exists($filename . '.mkv')) {
    $filepath = "$filename.mkv";
}

我正在寻找一种更简单的方法来过滤数组中的文件扩展名列表。

【问题讨论】:

  • 问题是,您是要查找第一个现有文件,还是所有现有文件?

标签: php arrays file file-extension


【解决方案1】:

试试这个

$extensions = ['mp4', 'avi', 'mkv'];     

foreach ($extensions as $extension) {
    $current = $filename . '.' . $extension;

    if (file_exists($current)) {
        $filepath = $current;

        break;
    }
}

【讨论】:

    【解决方案2】:

    由于您的问题并不清楚您是要查找 first 现有文件还是 所有 现有文件,所以这里有一个查找所有文件的解决方案:

    $extensions = ['mp4', 'avi', 'mkv'];     
    
    $filepaths = array_filter(
        array_map(
            function ($extension) use ($filename) {
                return $filename . '.' . $extension;
            }, 
            $extensions
        ),
        function ($filepath) {
            return file_exists($filepath);
        }
    );
    

    或者使用foreach 循环:

    $extensions = ['mp4', 'avi', 'mkv'];     
    
    $filepaths = [];
    
    foreach ($extensions as $extension) {
        $current = $filename . '.' . $extension;
    
        if (!file_exists($current)) {
            continue;
        }
    
        $filepaths[] = $current;
    }
    

    参考见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 2011-03-13
      • 2013-07-05
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      相关资源
      最近更新 更多