在php中重命名文件夹中所有图像的最佳方法是啥?

Posted

技术标签:

【中文标题】在php中重命名文件夹中所有图像的最佳方法是啥?【英文标题】:What is the best way to rename all the images in a folder in php?在php中重命名文件夹中所有图像的最佳方法是什么? 【发布时间】:2021-06-07 15:36:55 【问题描述】:

我是 php 新手,想知道如何在 PHP 中重命名文件夹中的所有图片。

我有一个包含不同图片的文件夹,所有图片都命名为:

- BBBOF1_0090_A.jpg
- BBBOF1_0090_B.jpg
- BBBOF1_0090_C.jpg
- BBDOTR_0070_A.jpg
- BBDOTR_0070_B.jpg
....

我想在每张图片的名字前加一个K,把数字1,2,3,4,5...改成a,b,c,d

最后我应该有:

- KBBBOF1_0090_1.jpg
- KBBBOF1_0090_2.jpg
- KBBBOF1_0090_3.jpg
- KBBDOTR_0070_1.jpg
- KBBDOTR_0070_2.jpg
....

请问我该怎么做?我尝试使用重命名功能添加 K,但是对于字母被数字替换的部分,我不知道该怎么做。

<?php

$path = $_POST['path'];


   $dir    = $path;
   $allFiles = scandir($dir);

   foreach($allFiles as $file) 

        if (!in_array($file,array(".","..")))
       
  
      $file = $dir.$file;
      $filename = basename( $file );

   
        $newname = "K$filename";

        rename ("C:/wamp64/www/KMD/Photos/$filename", "C:/wamp64/www/KMD/new/$newname");
        
    


  

    
echo "good !";
?>

【问题讨论】:

你的代码有什么问题? 没有错,前面添加了K,但是用数字替换字母我看不到......我想知道是否有可能在不移动文件的情况下直接重命名@GiacomoM "将数字 1,2,3,4,5... 更改为 a,b,c,d" 除了你最后想要的例子反过来显示:A、B、C 更改为 1、2、3。是哪一个:字母变成数字,还是数字变成字母? “直接重命名而不移动文件”是什么意思? rename() 函数有什么问题? 字母变成数字,如果我倒置了抱歉 【参考方案1】:

一种方法是简单地将_A 替换为_1

<?php
$files = [
    'BBBOF1_0090_A.jpg',
    'BBBOF1_0090_B.jpg',
    'BBBOF1_0090_C.jpg',
    'BBDOTR_0070_A.jpg',
    'BBDOTR_0070_B.jpg'
];

$replacers = [
    array_map(fn($v) => '_'.$v, range('A', 'Z')), 
    array_map(fn($v) => '_'.$v, range(1, 26))
];

foreach ($files as $file) 
    echo 'K'.str_replace($replacers[0], $replacers[1], $file).PHP_EOL;


结果

KBBBOF1_0090_1.jpg
KBBBOF1_0090_2.jpg
KBBBOF1_0090_3.jpg
KBBDOTR_0070_1.jpg
KBBDOTR_0070_2.jpg

在线查看:https://3v4l.org/BBArn

【讨论】:

谢谢,但我的代码有一个错误:解析错误:语法错误,意外 '=>' (T_DOUBLE_ARROW),期待 ')' 在 更新php或将每个fn($v) =&gt; '_'.$v改为function($v)return '_'.$v; 是的,如上所述将fn($v) =&gt; '_'.$v更改为function($v)return '_'.$v; 谢谢,修复了这个错误!但是现在图像存储在一个数组中,如果我想让我的代码适应我文件夹中的真实图像? 我忽略了它,因为它不是问题,也不会帮助未来的读者添加你的​​代码,你需要做的就是在你的代码/循环中实现上面的 3 行。【参考方案2】:

可能有更简单的方法可以做到这一点,但这里有一种方法:

$newname = "K$filename"; // Start from here
preg_match( '/_([A-Z])\.jpg/', $newname, $matches ); // Get last letter
$char = ord($matches[1])-ord('A')+1; // Turn letter into corresponding number (A->1, B->2, etc.)
$newname = preg_replace( '/_([A-Z])\.jpg/', "_".$char, $newname ); // Replace letter with number

【讨论】:

以上是关于在php中重命名文件夹中所有图像的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在Realm swift中重命名类的最佳方法

在颤动中重命名文件/图像

在 Linux 中写入命名管道的最佳、最安全的方法是啥?

如何在 .NET 中重命名文件?

在 TFS 2012 中重命名分支的后果是啥?

在 MonoTouch MonoDevelop 中重命名控制器类