1

我有一个文件夹,其中包含名为 standard_xx.jpg 的文件(xx 是一个数字)

我想找到最大的数字,以便我可以准备好文件名以重命名下一个正在上传的文件。

例如。如果最高数字是standard_12.jpg $newfilename = standard_13.jpg

我已经创建了一个方法来通过只是爆炸文件名来做到这一点,但它不是很优雅

$files = glob($uploaddir.'test-xrays-del/standard_*.JPG');
$maxfile = $files[count($files)-1];
$explode = explode('_',$maxfile);
$filename = $explode[1];
$explode2 = explode('.',$filename);
$number = $explode2[0];
$newnumber = $number + 1;
$standard = 'test-xrays-del/standard_'.$newnumber.'.JPG';
echo $newfile;

有没有更有效或更优雅的方式来做到这一点?

4

4 回答 4

2

您可以使用sscanfDocs

$success = sscanf($maxfile, 'standard_%d.JPG', $number);

它不仅可以让您选择数字(并且只有数字),还可以选择这是否有效($success)。

此外,您还可以查看natsortDocs以实际对您返回的数组进行排序以获得最高自然数。

使用这些的完整代码示例:

$mask   = 'standard_%s.JPG';
$prefix = 'test-xrays-del';    
$glob   = sprintf("%s%s/%s", $uploaddir, $prefix, sprintf($mask, '*'));
$files  = glob($glob);
if (!$files) {
    throw new RuntimeException('No files found or error with ' . $glob);
}

natsort($files);

$maxfile = end($files);
$success = sscanf($maxfile, sprintf($mask, '%d'), $number);
if (!$success) {
    throw new RuntimeException('Unable to obtain number from: ', $maxfile);
}

$newnumber = $number + 1;
$newfile   = sprintf("%s/%s", $prefix, sprintf($mask, $newnumber));
于 2013-01-09T12:15:45.250 回答
2

我自己会这样做:

<?php

    $files = glob($uploaddir.'test-xrays-del/standard_*.JPG');
    natsort($files);
    preg_match('!standard_(\d+)!', end($files), $matches);
    $newfile = 'standard_' . ($matches[1] + 1) . '.JPG';
    echo $newfile;
于 2013-01-09T12:19:09.347 回答
1

尝试:

$files   = glob($uploaddir.'test-xrays-del/standard_*.JPG');
natsort($files);
$highest = array_pop($files);

然后用正则表达式获取它的数字并增加值。

于 2013-01-09T12:15:25.460 回答
0

像这样的东西:

function getMaxFileID($path) {
    $files = new DirectoryIterator($path);
    $filtered = new RegexIterator($files, '/^.+\.jpg$/i');
    $maxFileID = 0;

    foreach ($filtered as $fileInfo) {
        $thisFileID = (int)preg_replace('/.*?_/',$fileInfo->getFilename());
        if($thisFileID > $maxFileID) { $maxFileID = $thisFileID;}
    }
    return $maxFileID;
}
于 2013-01-09T12:26:22.170 回答