PHP найти файл с самым высоким значением в своем имени файла - PullRequest
0 голосов
/ 07 октября 2010

Рассмотрим эту файловую структуру:

/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?

}

Любой указатель будет очень признателен.

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Попробуйте это:

$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

Меня не устраивает метод сортировки, возможно, кто-то может использовать его, поскольку вы не можете использовать плавающие числа в качестве ключей массива (они преобразуются в целые числа,что нехорошо.) Я также сделал предположение, что вы хотите, чтобы они были отсортированы по номеру перед подчеркиванием сначала, а затем использовать второе число в качестве критерия вторичного порядка.

1 голос
/ 07 октября 2010

Я нашел более простой способ:

$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
...