首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP通过比较散列查找重复文件,并删除任何重复文件。

PHP通过比较散列查找重复文件,并删除任何重复文件。
EN

Stack Overflow用户
提问于 2022-09-02 15:11:19
回答 1查看 54关注 0票数 0

我正在循环遍历目录中的文件,并将名称和哈希保存在数组中,如下所示:

代码语言:javascript
复制
$localfileslist = [];
$localfiles = glob($_GET['name'].'/*');
foreach($localfiles as $localfile){
    if(is_file($localfile)){
        $localfilehash= hash_file('sha256', $localfile);
         array_push($localfileslist,$localfile, $localfilehash);
    }
    }
    $uniques= array_unique($localfileslist);
    $dupes=array_diff_assoc($localfileslist,$aunique);
print_r($result);

现在,我很困惑如何继续寻找和删除它们,任何帮助都是感激的。

EN

回答 1

Stack Overflow用户

发布于 2022-09-03 22:03:56

基本上,我首先将每个散列和名称存储在一起。然后,我对散列上的数组进行分组,将所有相同的散列名称推送给每个组。最后,我们可以过滤该分组数组,该数组只有一个以上名称的项。

代码语言:javascript
复制
$localfileslist = [];
$localfiles = glob(DEFINE_PATH . '/*');
foreach ($localfiles as $localfile) {
    if (is_file($localfile)) {
        $localfilehash = hash_file('sha256', $localfile);
        array_push($localfileslist, ['name' => $localfile, 'hash' => $localfilehash]);
    }
}

$grouped = array_reduce($localfileslist, function ($agg, $item) {
    if (!isset($agg[$item['hash']])) {
        $agg[$item['hash']] = [];
    }
    $agg[$item['hash']][] = $item["name"];
    return $agg;
}, []);

$duplicates = array_filter($grouped, function ($item) {
    return count($item) > 1;
});

print_r($duplicates);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73584695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档