我想抓取目录中的第一个文件,而不接触/抓取所有其他文件。文件名未知。
一种非常短的方法可能是这样,使用glob
:
$file = array_slice(glob('/directory/*.jpg'), 0, 1);
但是如果那个目录中有很多文件,就会有一些开销。
其他方法是这个问题的答案 - 但都涉及一个循环并且也比 glob 示例更长:
有没有一种非常简短有效的方法来解决这个问题?
我想抓取目录中的第一个文件,而不接触/抓取所有其他文件。文件名未知。
一种非常短的方法可能是这样,使用glob
:
$file = array_slice(glob('/directory/*.jpg'), 0, 1);
但是如果那个目录中有很多文件,就会有一些开销。
其他方法是这个问题的答案 - 但都涉及一个循环并且也比 glob 示例更长:
有没有一种非常简短有效的方法来解决这个问题?
可能不是完全有效,但如果你只想要出现的第一个 jpg,那么
$dh = opendir('directory/');
while($filename = readdir($dh)) {
if (substr($filename, -4) == '.jpg')) {
break;
}
}
好吧,这并不完全是单线的,但我相信这是一条路要走:
$result = null;
foreach(new FilesystemIterator('directory/') as $file)
{
if($file->isFile() && $file->getExtension() == 'jpg') {
$result = $file->getPathname();
break;
}
}
但是为什么不将它包装在一个函数中并像使用它一样使用它get_first_file('directory/')
呢?这将是一个美好而短暂的!
此函数将获取任何类型的第一个文件名。
function get_first_filename ($dir) {
$d = dir($dir);
while ($f = $d->read()){
if (is_file($dir . '/' . $f)) {
$d->close();
return $f;
}
}
}