0

考虑这个文件结构:

/folder/locaux-S04_3.html
/folder/blurb.txt
/folder/locaux-S04_2.html
/folder/locaux-S05_1.html
/folder/tarata.02.jpg
/folder/locaux-S04_1.html
/folder/dfdsf.pdf

我需要检索名称包含目录中最高数值的文件。在上面的例子中,它是locaux-S05_1.html

我想出了 glob() 作为仅获取 locaux-S*.html 文件的有效方法,但我被困在下一步:找到文件名包含最高值的文件。

$files= glob(LOCAUX_FILE_PATH.'/locaux-S*.html');

foreach($files as $key=> $value){
    // loop through and get the value in the filename. Highest wins a trip to download land!

$end = strrpos($value,'.');
$len= strlen($value);
$length = $len-$end;
$str = substr($value,8,$length);
// this gives me the meat, ex: 03_02. What next?

}

任何指针将不胜感激。

4

2 回答 2

2

尝试这个:

$files = glob(LOCAUX_FILE_PATH.'/locaux-S*.html');
$to_sort = array();

foreach ($files as $filename)
{
    if (preg_match('/locaux-S(\d+)_(\d+)\.html/', $filename, $matches)) {
        $to_sort[$matches[1].'.'.$matches[2]] = $filename;
    }
}

krsort($to_sort);
echo reset($to_sort); // Full filepath of locaux-S05_1.html in your example

I'm not happy with the sorting method, perhaps someone could build on this, as you can't use floats as array keys (they're converted to integers, which is no good.) I've also made the assumption that you want them to be sorted by the number before the underscore first, then to use the second number as the secondary order criterion.

于 2010-10-06T22:14:35.987 回答
1

我找到了一个更简单的方法:

$files= glob(LOCAUX_FILE_PATH.'/locaux-S*.html');
sort($files); // sort the files from lowest to highest, alphabetically
$file  = array_pop($files); // return the last element of the array
于 2010-10-06T22:18:07.700 回答