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

sscanfドキュメントを利用できます:

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

それはあなたが数(そして数だけ)を選ぶだけでなく、これがうまくいったかどうかも選ぶことを可能にするでしょう($success)。

さらに、natsortドキュメントを調べて、取得した配列を実際に並べ替えて、自然数が最も高くなるようにすることもできます。

これらを利用した完全なコード例:

$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 に答える