Php 如果数组中不存在项

Php 如果数组中不存在项,php,directory,Php,Directory,如果数组中不再存在项,但存在不再需要名称的文件夹。检查和删除文件夹的最佳方法是什么 示例: 我有一个数组('blah','apple','oneDirection')然后,我将运行一个命令,在特定位置用数组中的名称创建一个文件夹/dir,但是如果oneDirection不再在数组中,我想删除文件夹/dir->我会在数组中使用 数组数据来自外部JSON提要,因此它将被自动删除,完成此操作后,我希望它删除文件夹/dir-我不确定数组和文件夹/dir名称检查结构上的位置,代码中从数组中“删除”文件夹的

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

示例:

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


数组数据来自外部JSON提要,因此它将被自动删除,完成此操作后,我希望它删除文件夹/dir-我不确定数组和文件夹/dir名称检查结构上的位置,代码中从数组中“删除”文件夹的位置应删除真正的文件夹。更具体地说,与其使用
unset
array\u pop
,不如创建一个函数,首先尝试
rmdir
文件夹(使用
try
catch
),并且只有在一切顺利的情况下,才应从数组中删除该项

此外,如果当时无法删除该文件夹,则不应删除该项目,而应将其保留在某种挂起队列中,并重试

  • 从数组中删除项目时,也要删除文件夹;如果不可能
  • 保留两个数组:在一个数组中,删除项目,然后比较数组中的差异=要删除的文件夹,或
  • 如果所有文件夹都在一个没有其他内容的文件夹中,请加载父文件夹的所有子文件夹并检查它们是否在数组中
  • 以下是如何获取其他文件夹的所有文件夹:


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

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

    然后在JSON提要上循环,创建所有尚未创建的文件夹,如果已经存在,则从
    $createdFolders
    中的id/name取消设置

    当您在所有项目上循环后,您将能够在
    $createdFolders
    上循环。此处留下的项目是删除候选项

    对于实际检查,您可以使用,类似这样的内容就足够了:

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

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

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

    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);
    

    你所说的文件夹是什么意思?介意提供一个代码示例吗?还是我们应该“理论上”保留它?我将使用一个数组,通过$id创建文件夹/dir,但如果找不到$id,我希望它删除文件夹/dir@alfasin将尝试“理论上”的自动取款机@JPR是的,但我不确定的是它周围的检查代码。该代码来自外部源的JSON提要。我只是对检查数组和检查文件夹/dir有点迷茫names@JessMcKenzie在这种情况下,我将创建一个新数组,其中包含要删除的候选对象,并一次处理一个,以我上面提到的相同方式。你能给我举个例子吗?我猜我会有一个带$id的数组和一个带文件夹/dir名称的数组,如果它们不匹配,将删除文件夹?我在寻找你的第一个点的结构-数组中的数据来自外部源,因此它将自动删除。我只是不确定检查数组和文件夹/dir名称的最佳方法