如果文件不在数组中,则将其删除

时间:2018-09-19 16:53:10

标签: php

从测试我的应用程序开始,我在目录中有一堆额外的垃圾上传。我要保留的文件在数据库的表中。我想删除目录中没有的文件。这是我的尝试

<?php

$query = 'SELECT file_name FROM DummyFile';
$statement = $db->prepare($query);
$statement->execute();
$files_in_use = $statement->fetchAll();

$statement->closeCursor();

$path = getcwd();
$all_files_in_directory = scandir($path);

$all_files_in_directory = array_diff($all_files_in_directory, array('.', '..'));



foreach($all_files_in_directory as $file) {
    if (!in_array($file, $files_in_use)) {
        unlink($file);
    } 
}



?>

但是无论如何,此代码都会删除目录中的每个文件。这意味着我在循环中的条件在每次都不应该评估为true时进行评估。请帮助

1 个答案:

答案 0 :(得分:1)

您假设$files_in_use是文件名数组。不是;它是一个数据库行的数组,每个行本身都是一个数组。

仅获取所需的文件名:

$files_in_use = array_column($statement->fetchAll(), 'file_name');

其余的代码应该可以正常工作。