Reputation: 1695
I've got a folder full of files pulled into an array:
Array
(
[2] => 2_1_page2-img5.jpg
[3] => 2_2_page2-img5-big.jpg
[4] => 3_1_page2-img6.jpg
[5] => 3_2_page2-img6-big.jpg
[6] => 4_1_page2-img3.jpg
[7] => 4_2_page2-img3-big.jpg
[8] => 6_2_page2-img3-big.jpg
[9] => 8_2_page2-img3-big.jpg
)
I'm trying to create a script that will rename them all so they start at 1 and rename incrementally. The ideal solution would be:
Array
(
[2] => 1_1_page2-img5.jpg
[3] => 1_2_page2-img5-big.jpg
[4] => 2_1_page2-img6.jpg
[5] => 2_2_page2-img6-big.jpg
[6] => 3_1_page2-img3.jpg
[7] => 3_2_page2-img3-big.jpg
[8] => 4_2_page2-img3-big.jpg
[9] => 5_2_page2-img3-big.jpg
)
I won't know whether each number will have one or two images attached to it.
So far I've got:
$filecounter = 1;
$previousNumber = $filecounter;
foreach($listing as $imagename){
// $imagename: the original filename
// $prefixNumber: the first number from the filename
// $reducedfilename: the filename without the prefix
// $previousNumber: the previous number
// $filecounter: the count up from 1
$prefixNumber = stristr($imagename, '_',true);
$reducedfilename = ltrim(stristr($imagename, '_'), '_');
if ($prefixNumber != $filecounter && $prefixNumber != $previousNumber){
$previousNumber = $filecounter;
$filecounter++;
echo "filecounter: $filecounter<br>prefixNumber: $prefixNumber<br>previousNumber: $previousNumber<br>";
echo "1. Renaming: " .$imagename . " to " . $filecounter . "_" . $reducedfilename . "<br><br>";
//rename($directory . $imagename, $directory . $filecounter. "_" . $reducedfilename);
} else {
echo "filecounter: $filecounter<br>prefixNumber: $prefixNumber<br>previousNumber: $previousNumber<br>";
echo "2. Renaming: " .$imagename . " to " . $previousNumber . "_" . $reducedfilename . "<br><br>";
//rename($directory . $imagename, $directory . $previousNumber . "_" . $reducedfilename);
}
I've given myself a ton of visual pointers to try and help but I think I've been staring at it too long and I honestly can't work it out.
Does anyone please have any ideas what I'm doing wrong here?
Upvotes: 0
Views: 77
Reputation: 920
I think something like this should probably work for you.
$filecounter = 1;
$currentPrefix = false;
$lastPrefix = false;
foreach ($listing as $imagename) {
$aFileParts = explode('_', $imagename);
$currentPrefix = $aFileParts[0];
if (!$lastPrefix) {
$lastPrefix = $currentPrefix;
}
if ($currentPrefix != $lastPrefix) {
$filecounter++;
$lastPrefix = $currentPrefix;
}
$newFileName = $filecounter . '_' . $aFileParts[1] . '_' . $aFileParts[2];
}
Upvotes: 1