如果数组中不存在某个项

时间:2012-11-30 07:20:24

标签: php directory

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

示例:

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

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

TMHO,代码中从数组中“删除”文件夹的相同位置 - 应该删除 real 文件夹。更具体地说,不是使用unsetarray_pop - 而是创建一个首先尝试rmdir文件夹的函数(使用trycatch)如果一切顺利 - 它应该从数组中删除项目。

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

答案 2 :(得分:0)

  1. 从阵列中删除项目时,也要删除该文件夹;如果不可能
  2. 保留两个数组:在一个项目中,项目被删除,然后比较差异的数组=要删除的文件夹,或
  3. 如果所有文件夹都在一个没有其他内容的文件夹中,请加载父文件夹的所有子文件并检查它们是否在数组中
  4. 以下是如何获取其他文件夹的所有文件夹:PHP opendir() to list folders only

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

答案 3 :(得分:0)

你需要做的是循环你当前拥有的所有文件夹,并将他们所有的名字/ id存储在一个数组中 - 我们将这个数组称为$createdFolders

然后循环遍历JSON Feed,并创建尚未创建的所有文件夹,并unset来自$createdFolders的ID / {,如果它已存在。

当您循环遍历所有项目时,您将能够遍历$createdFolders。这里留下的项目是删除候选人。

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

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

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