我有一个文件夹,里面有几百个文件。文件名总是类似于######_###-#######.ext它们的共同点是分隔符"-"。在分隔符之前具有相同名称的文件应被视为相同的项目组。
我想要实现的是运行一个php文件,该文件扫描整个文件夹并从这些文件创建zip档案。每个档案都应该包含一个文章组中的所有文件,并像分隔符之前的文件名一样命名,以了解其内容。
示例(文件名;是的,它们可能有空白):
- Article_1-子类型a.ext
- Article_1-子类型b.ext
- 第2条-子类型a.ext
- Article_2-子类型b.ext
- Article_2-子类型c.ext
运行流程后,应该有2个档案(在这种情况下)。其中一个名为Article_1.zip,包含前两个文件,因为它们组成了一个组。第二个文件包含其余三个文件,并命名为Article_2.zip,因为它们组成了一个组。
我花了半天的时间处理array_count_values、array_key_exists等等,但我被困在了这一点上。此外,我确信我将分隔符之前的部分作为文件名的方法已经非常复杂和过度了。
我非常感谢任何帮助!:)
php代码根据文章名称分隔文件如下:-
<?php
$array = Array('Article_1 - Subtype a.ext','Article_1 - Subtype b.ext','Article_2 - Subtype a.ext','Article_2 - Subtype b.ext','Article_2 - Subtype c.ext');
$new_array = array();
foreach($array as $arr) {
$exploded_array = explode("-", $arr);
$new_array[$exploded_array[0]][] = $arr;
}
echo "<pre/>";
print_r($new_array);
?>
输出:-https://eval.in/389841
再次感谢。发布完成此操作的最终代码:(MV是存储要打包的文件的子文件夹)
$files = scandir('MV/');
$arr2 = array();
foreach($files as $arr)
{
$exploded_array = explode(" - ", $arr);
$arr2[$exploded_array[0]][] = $arr;
}
for($k=0;$k<count($arr2);$k++)
{
$zip = new ZipArchive();
$key = key($arr2);
$title = './'.$key.'.zip';
if ($zip->open($title, ZipArchive::CREATE)!==TRUE)
{
exit("cannot open <$filename>'n");
}
for($l=0;$l<count($arr2[$key]);$l++)
{
$zip->addFile('MV/'.$arr2[$key][$l],$arr2[$key][$l]);
}
next($arr2);
echo 'The zip archive ', $title,' contains ',$zip->numFiles,' files.';
echo '<br>';
$zip->close();
}
?>