views:

11

answers:

2

Consider this file structure:

/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

I need to retrieve the file which name contains the highest numeric value in a directory. In the above example, it is locaux-S05_1.html

I came up with glob() as an efficient way to only get the locaux-S*.html files but i'm stuck in the next step: finding the one which filename contains the highest value.

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

}

Any pointer would be very appreciated.

+2  A: 

Try this:

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

chigley
assumption correct, interesting bit of code!
pixeline
A: 

I found a simpler way:

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