0

如果数组中不再存在某个项目,但有一个不再需要名称的文件夹。检查和删除文件夹的最佳方法是什么?

例子:

我有一个array('blah','apple','oneDirection'); 然后我将运行一个命令在特定位置创建一个文件夹/目录,其中包含数组中的名称,但如果oneDirection不再在数组中,我想删除文件夹/目录->我会使用in_array吗?

数组数据来自外部 JSON 提要,因此它将自动删除,完成后我希望它删除文件夹/目录 - 我不确定数组和文件夹/目录名称检查结构

4

4 回答 4

1

只是一个可以作为示例的快速片段。

function del_dir($dir, $key, $root) {
        // may need to do more here like delete recursively
        $rp= realpath($root .'\\'. $dir);
        rmdir( $rp);
        echo "folder: $rp : removed\n";
}

// your root folder
$home_dir= "c:\\tmp";
// your array of folders
$folders= array("folder1", "folder2");
$fs_folders=array();
if ($dh = opendir($home_dir)) {
    while (($f = readdir($dh)) !== false) {
        if(is_dir("$home_dir\\$f")){
            if ($f != "." && $f != "..")
                $fs_folders[]= $f;
        }
    }
    closedir($dh);
}

$todel= array_diff($fs_folders, $folders);
array_walk($todel, "del_dir", $home_dir);
于 2012-11-30T08:21:33.677 回答
0

TMHO,代码中从数组中“删除”文件夹的相同位置 - 应该删除真正的文件夹。更具体地说,不要使用unsetor array_pop- 创建一个首先尝试访问rmdir文件夹的函数(使用tryand catch)并且只有在一切顺利的情况下 - 它应该从数组中删除该项目。

此外,如果当时无法删除该文件夹,则不应删除该项目 - 但在某种待处理队列中保持“保留” - 重试等。

于 2012-11-30T07:26:23.537 回答
0
  1. 当您从数组中删除一个项目时,也删除该文件夹;如果不可能
  2. 保留两个数组:在一个中,删除项目,然后比较数组的差异=要删除的文件夹,或者
  3. 如果所有文件夹都在一个没有其他内容的文件夹中,则加载父文件夹的所有子文件夹并检查它们是否在数组中

以下是获取另一个文件夹的所有文件夹的方法:PHP opendir() 仅列出文件夹

然后,在if语句中使用in_array方法或其他方式来确定文件夹是否在数组中。如果没有,请删除它。

于 2012-11-30T07:29:27.987 回答
0

您需要做的是遍历您当前拥有的所有文件夹,并将它们的所有名称/id 存储在一个数组中 - 我们将这个数组称为$createdFolders.

然后遍历 JSON 提要,并创建所有尚未创建的文件夹,如果它已经存在,unset则从 id/name 中创建。$createdFolders

当您遍历所有项目时,您将能够遍历$createdFolders. 留在此处的项目是删除候选者。

至于实际检查,您可以使用in_array,这样的东西就足够了:

if ( in_array ( $array[$item], $createdFolders )) {
    unset ( $createdFolders[$item] );
}

当然,这假设两个数组的键相同。

于 2012-11-30T07:40:22.813 回答