2010-10-06 20 views
0

Considérez cette structure de fichier:php fichier trouver avec la valeur la plus élevée dans son nom de fichier

/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 

je dois récupérer le fichier dont le nom contient la plus grande valeur numérique dans un répertoire. Dans l'exemple ci-dessus, c'est local-S05_1.html

Je suis arrivé avec glob() comme moyen efficace d'obtenir uniquement les fichiers locaux-S * .html mais je suis bloqué à l'étape suivante: trouver celui dont le nom de fichier contient la valeur la plus élevée.

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

} 

Tout pointeur serait très apprécié.

Répondre

2

Essayez ceci:

$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 

Je ne suis pas satisfait de la méthode de tri, peut-être quelqu'un pourrait tirer parti, comme vous ne pouvez pas utiliser des flotteurs comme clés du tableau (ils sont convertis en nombres entiers, n'est pas bon.) J'ai aussi supposé que vous vouliez qu'ils soient triés par le nombre précédant le trait de soulignement, puis d'utiliser le second nombre comme critère d'ordre secondaire.

+0

hypothèse correcte, peu intéressante de code! – pixeline

1

J'ai trouvé un moyen plus simple:

$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