mkdir目录树从数组


php mkdir folder tree from array

我正在尝试从数组中创建一个文件夹树,从字符串中获取。

$folders = str_split(564);

564实际上可以是任何数字。目标是创建一个类似/5/6/4

的文件夹结构。

我已经设法在一个位置创建所有文件夹,使用从另一个线程灵感的代码-

for ($i=0;$i<count($folders);$i++) {
    for ($j=0;$j<count($folders[$i]);$j++) {
        $path .= $folders[$i][$j] . "/";
        mkdir("$path");
    }
    unset($path);
}

,但这样我得到所有文件夹在相同的包含路径。此外,如何在磁盘上的特定位置创建这些文件夹?不是很熟悉高级php,抱歉:(

谢谢。

这很简单。

对文件夹数组的每个循环执行a,并创建一个字符串,在每个循环上附加下一个子文件夹:

<?php
$folders = str_split(564);
$pathToCreateFolder = '';
foreach($folders as $folder) {
   $pathToCreateFolder .= DIRECTORY_SEPARATOR . $folder;
   mkdir($folder);
}

您还可以添加基本路径,其中文件夹应该创建到初始化的$pathToCreateFolder

这里有一个演示:http://codepad.org/aUerytTd

或者像Michael在注释中提到的那样,只写一行:

mkdir(implode(DIRECTORY_SEPARATOR, $folders), 0777, TRUE);

TRUE标志允许mkdir递归创建文件夹。内爆把目录的部分像5/6/4一样放在一起。DIRECTORY_SEPARATOR是一个PHP常量,用于unix机器上的斜杠(/)或windows上的反斜杠(')。

为什么不直接做:

<?php
$directories = str_split(564);
$path = implode(DIRECTORY_SEPARATOR, $directories);
mkdir($path, 0777, true);

不知道自己到底在做什么,但这里有一些提示。

有递归mkdir:
if(!file_exists($dir)) // check if directory is not created
{
   @mkdir($dir, 0755, true); // create it recursively
}

您想要的路径可以在两个函数调用中创建,并以一些起始路径作为前缀:

$path = 'some/path/to/cache';
$cache_node_id = 4515;
$path = $path.'/'.join('/', str_split($cache_node_id));

结果路径可用于使用上面的代码创建文件夹

这里有一对函数/方法

function getPath($node_id, $path = 'default_path')
{
  return $path.'/'.join('/', str_split($node_id))
}
function createPath($node_id, $path = 'default_path');
{
   $path = getPath($node_id, $path);
   if(!file_exists($path)) // check if directory is not created
   {
     @mkdir($path, 0755, true); // create it recursively
   }
}

有了这些,你可以很容易地在任何你想要的地方创建这样的文件夹,并根据你的号码找到它们。

如前所述,我从一个朋友那里得到的解决方案是

$folders = str_split(564); 
mkdir(implode('/',$folders),0777,true);

另外,为了添加在变量中定义的位置,我使用

$folders = str_split($idimg);
mkdir($path_defined_earlier. implode('/',$folders),0777,true);

所以感谢所有的答案,似乎这是正确的方式来处理这个。现在的问题是,我需要创建的路径,那么我如何将它存储在一个变量中?对不起,如果这违反了任何规则,如果我需要创建一个新的线程,我会这样做…