On Wed, 2007-09-26 at 15:11 -0400, brian wrote: > 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. <?php function getNextImageIndex( $path, $prefix ) { // // Matches files like foo_123.png // $pattern = '/.*_([[:digit:]]+)\.[[:alpha:]]{3}$/'; $filenames = glob( "${path}${prefix}*" ); if( $filenames ) { sort( $filenames ); $last = array_pop( $filenames ); $nextIndex = (int)preg_replace( $pattern, '$1', $last ) + 1; return str_pad( $nextIndex, 2, '0', STR_PAD_LEFT ); } return '01'; } ?> Note that the moment you get 100 images the code breaks because _100 sorts before _99 and so you will always write over the 100th index. To fix this you need to loop through all found files and pull the index out and record the highest found. Cheers, Rob. -- ........................................................... SwarmBuy.com - http://www.swarmbuy.com Leveraging the buying power of the masses! ........................................................... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php