如果数组中不再存在某个项目,但有一个不再需要名称的文件夹。检查和删除文件夹的最佳方法是什么?
例子:
我有一个array('blah','apple','oneDirection'); 然后我将运行一个命令在特定位置创建一个文件夹/目录,其中包含数组中的名称,但如果oneDirection不再在数组中,我想删除文件夹/目录->我会使用in_array吗?
数组数据来自外部 JSON 提要,因此它将自动删除,完成后我希望它删除文件夹/目录 - 我不确定数组和文件夹/目录名称检查结构
只是一个可以作为示例的快速片段。
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);
TMHO,代码中从数组中“删除”文件夹的相同位置 - 应该删除真正的文件夹。更具体地说,不要使用unsetor array_pop- 创建一个首先尝试访问rmdir文件夹的函数(使用tryand catch)并且只有在一切顺利的情况下 - 它应该从数组中删除该项目。
此外,如果当时无法删除该文件夹,则不应删除该项目 - 但在某种待处理队列中保持“保留” - 重试等。
以下是获取另一个文件夹的所有文件夹的方法:PHP opendir() 仅列出文件夹
然后,在if语句中使用in_array方法或其他方式来确定文件夹是否在数组中。如果没有,请删除它。
您需要做的是遍历您当前拥有的所有文件夹,并将它们的所有名称/id 存储在一个数组中 - 我们将这个数组称为$createdFolders.
然后遍历 JSON 提要,并创建所有尚未创建的文件夹,如果它已经存在,unset则从 id/name 中创建。$createdFolders
当您遍历所有项目时,您将能够遍历$createdFolders. 留在此处的项目是删除候选者。
至于实际检查,您可以使用in_array,这样的东西就足够了:
if ( in_array ( $array[$item], $createdFolders )) {
unset ( $createdFolders[$item] );
}
当然,这假设两个数组的键相同。