Laravel如何从文件夹仅获取文件名数组而非含路径的数组?
如何在Laravel中仅获取文件名数组(而非带路径的)
嘿,这个问题很常见!你不用手动写foreach循环逐个提取,Laravel的Filesystem组件已经给我们提供了更简洁的方式——因为File::allFiles()返回的其实是**SplFileInfo对象数组**,每个对象都自带获取文件名的方法。
这里有两种简洁的实现方式:
方式一:使用Laravel集合处理(推荐)
利用集合的map方法快速转换,最后转成数组:
$fileNames = collect(File::allFiles('myfolder/')) ->map(fn($file) => $file->getFilename()) ->toArray();
集合的链式调用可读性很高,而且如果后续还要对文件名做过滤、排序等操作,直接追加方法就行,非常灵活。
方式二:使用array_map函数
如果你更习惯原生PHP函数,也可以用array_map来处理:
$fileNames = array_map(function($file) { return $file->getFilename(); }, File::allFiles('myfolder/')); // 或者用PHP 7.4+的箭头函数更简洁: $fileNames = array_map(fn($file) => $file->getFilename(), File::allFiles('myfolder/'));
补充说明:
- 如果你只需要当前目录下的文件(不递归子目录),可以把
allFiles()换成files(),处理逻辑是一样的。 getFilename()方法会直接返回不带路径的纯文件名(包括扩展名),比手动用basename()处理路径字符串更可靠,因为SplFileInfo已经帮我们封装了文件系统的细节。
内容的提问来源于stack exchange,提问作者user779681
相关产品推荐
相关产品推荐

