以增量方式重命名数组中的文件


renaming files in an array incrementally

我有一个文件夹,里面装满了拉入数组的文件:

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
)

我正在尝试创建一个脚本来重命名它们,以便它们从 1 开始并逐步重命名。理想的解决方案是:

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
)

我不知道每个数字是否会附上一个或两个图像。

到目前为止,我已经得到了:

    $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);
        }

我已经给了自己大量的视觉指示来尝试和帮助,但我认为我已经盯着它太久了,老实说我无法解决它。

有人知道我在这里做错了什么吗?

我认为这样的东西应该适合你。

$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];
}