我的产品有以下代码/照片:
D2000-1.jpg
D2000-2.jpg
D2000-3.jpg
D2001-1.jpg
D2001-2.jpg
D2001-3.jpg
D2001-4.jpg
我希望在产品D2000的-1.jpg照片和产品D2001的-2.jpg照片之后删除所有内容,并且仅保留:
D2000-1.jpg
D2001-1.jpg
D2001-2.jpg
PHP可以实现吗?我想这样做,因为我有数以千计的产品照片要删除。
修改
以下是我现在所做的事情:
<?php
// Maxmimum photos
$codes = array(
'D2000' => '1',
'D2001' => '2',
);
// Directory listing
$files = scandir(dirname(__FILE__) . '/products');
natsort($files);
// Process deletion
foreach($codes as $code => $photo) {
//
}
?>
答案 0 :(得分:0)
而不是你的foreach:
$processed = array();
foreach($files as $f){
$n = basename($f, '.jpg');
$d = explode('-', $n);
$processed[$d[0]][] = $d[1];
}
foreach($codes as $name=>$max){
while(isset($processed[$name][$max-1])){
$suffix = array_pop($processed[$name]);
unlink($name.'-'.$suffix);
}
}
应该工作,没有测试。
答案 1 :(得分:0)
我不会给你准备好的解决方案,而是一些伪(未经验证的)代码。
// we will get DXXXX and number after '-' separately for every photo name.
$names = array_map(function($file) {
//get only file without extension
$fileName = explode('.', $file);
//separate e.g. D2000 and 1
return explode('-', $fileName[0]);
},$files);
//you should iterate files, not codes
foreach($files as $file) {
//if this photo not in $codes, don't do anything
if(!in_array($file[0], $codes)) { continue; }
//if number of photo > threshold, then delete
if($file[1]> $codes[$file[0]) {
unlink($file[0].$file[1].'.jpg');
}
}
它可以让你找到你正在寻找的形状。