如果某个项目不再存在于数组中,但存在一个不再需要名称的文件夹。检查和删除文件夹的最佳方法是什么?
示例:
我有一个array('blah','apple','oneDirection');
然后我将运行一个命令,在一个特定位置创建一个文件夹/目录,其中包含数组中的名称,但如果oneDirection
不再在数组中,我想删除文件夹/ dir - >我会使用in_array
吗?
数组数据来自外部JSON提要,因此它将被自动删除,完成后我希望它删除文件夹/目录 - 我不确定数组和文件夹/目录名称检查结构
答案 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 文件夹。更具体地说,不是使用unset
或array_pop
- 而是创建一个首先尝试rmdir
文件夹的函数(使用try
和catch
)如果一切顺利 - 它应该从数组中删除项目。
此外,如果当时无法删除该文件夹,则不应删除该项目 - 但在某种待处理队列中保持“保留” - 重试等。
答案 2 :(得分:0)
以下是如何获取其他文件夹的所有文件夹: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] );
}
当然,这假设两个数组的密钥相同。