// glob returns an ordered list (rtfm: man glob)
// relies on the use of the operator ++ to generate string sequences.
function lastFileInSequence($path, $prefix, $first, $suffix) {
return array_pop(glob($path . "/" . $prefix . str_repeat('?',
strlen($first)) . $suffix));
}
function nextFileInSequence($path, $prefix, $first, $suffix) {
if ($lastFile = basename(lastFileInSequence($path, $prefix, $first,
$suffix), $suffix)) {
return ++$lastFile . $suffix;
} else {
return $prefix . $first . $suffix;
}
}
$nextImage = $path . "/" . nextFileInSequence($path, "foo_", "01", ".jpg");
2007/9/26, brian <[EMAIL PROTECTED]>:
>
> I have a directory that contains many images (no, not pr0n,
> unfortunately) and i'm working on an admin script for adding to it. I've
> got something that works alright but i'm wondering if there's a Better
> Way.
>
> Each image is named like: foo_01.jpg, foo_02.jpg, bar_01.jpg, and so on.
> When adding a new image it should be assigned the next number in the
> series (the prefix is known). Thus, given the prefix 'bar' i do
> something like:
>
> function getNextImage($path, $prefix)
> {
> $pattern = "/^${prefix}_([0-9]{2})\.[a-z]{3}$/";
>
> $filenames = glob("${path}${prefix}*");
>
> if (is_array($filenames) && sizeof($filenames))
> {
> sort($filenames);
>
> /* eg. 'foo_32.jpg'
> */
> $last = basename(array_pop($filenames));
>
> /* pull the number from the filename
> */
> $count = intval(preg_replace($pattern, '$1', $last));
>
> /* increment, format with leading zero again if necessary,
> * and return it
> */
> return sprintf('%02d', ++$count)
> }
> else
> {
> return '01';
> }
> }
>
> Note that there almost certainly will never be more than 99 images to a
> series. In any case, i don't care about there being more than one
> leading zero. One is what i want.
>
> brian
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>