我有一个文件夹,里面有我的网站产品的数千张图片,看起来像这样:
D25200-1.jpg
D25200-2.jpg
D25200-3.jpg
D25201-1.jpg
D25201-2.jpg
D25201-3.jpg
D25201-4.jpg
也就是说,产品D25200
有3张照片,D25201
有4张照片。
我想删除一些图像,但保持计数为1。例如,如果我删除D25201-1.jpg
和D25201-2
,则要重命名为D25201-1.jpg
和D25201-2.jpg
的其余图像。
这是我迄今为止创建的代码,但它只删除照片:
<?php
$codes = array(
'D25201' => '1,2'
);
$dirs = array(
dirname(__FILE__) . '/products/',
dirname(__FILE__) . '/products/large/',
dirname(__FILE__) . '/products/medium/',
dirname(__FILE__) . '/products/small/'
);
foreach($codes as $code => $photos) {
$photos = explode(',', $photos);
foreach($photos as $photo) {
foreach($dirs as $dir) {
unlink($dir . $code . '-' . $photo . '.jpg');
}
}
}
?>
我还没有时间测试这个,但应该这样做(或者至少给你一个可能的方向的提示,让你自己计算其余部分):
$codes = array(
'D25201' => '1,2'
);
$dirs = array(
dirname(__FILE__) . '/products/',
dirname(__FILE__) . '/products/large/',
dirname(__FILE__) . '/products/medium/',
dirname(__FILE__) . '/products/small/'
);
foreach($codes as $code => $photos) {
$photos = explode(',', $photos);
foreach($photos as $photo) {
foreach($dirs as $dir) {
if(unlink($dir . $code . '-' . $photo . '.jpg');){
//if unlink is successfull... loop all images in current dir
$files = scandir($dir);
$c = 0;
foreach($files as $file){
$c++;
//if the name of the image contains the productcode
if(strpos($file,$code) !== false){
//rename the file
rename ($file , $dir . $code . '-' . $c . '.jpg');
}
}
}
}
}
}
可能有一种更好的方法,使用更少的循环,但这样的方法应该有效。