我想抓取目录中的第一个文件,而不触及/抓取所有其他文件。文件名未知。
使用glob
:
$file = array_slice(glob('/directory/*.jpg'), 0, 1);
但如果该目录中有很多文件,则会有一些开销。
其他方式是这个问题的答案 - 但所有方法都涉及一个循环,并且比glob例子更长:
PHP: How can I grab a single file from a directory without scanning entire directory?
是否有一种非常简短有效的方法来解决这个问题?
答案 0 :(得分:4)
可能效率不高,但如果您只想要出现的第一个jpg,那么
$dh = opendir('directory/');
while($filename = readdir($dh)) {
if (substr($filename, -4) == '.jpg')) {
break;
}
}
答案 1 :(得分:2)
嗯,这不是一个单行,但我认为这是一种方式:
$result = null;
foreach(new FilesystemIterator('directory/') as $file)
{
if($file->isFile() && $file->getExtension() == 'jpg') {
$result = $file->getPathname();
break;
}
}
但为什么不将它包装在函数中并像get_first_file('directory/')
一样使用它?这将是一个很好的短暂的!
答案 2 :(得分:0)
此函数将获取任何类型的第一个文件名。
function get_first_filename ($dir) {
$d = dir($dir);
while ($f = $d->read()){
if (is_file($dir . '/' . $f)) {
$d->close();
return $f;
}
}
}