在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) => '_'.$v
改为function($v)return '_'.$v;
是的,如上所述将fn($v) => '_'.$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中重命名文件夹中所有图像的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章