使用最大数量从目录中删除文件

时间:2013-12-04 10:16:24

标签: php

我的产品有以下代码/照片:

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) {
    //
}
?>

2 个答案:

答案 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');
  }

}

它可以让你找到你正在寻找的形状。