来自数组的php mkdir文件夹树

时间:2014-05-17 20:38:06

标签: php arrays mkdir

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

$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,抱歉:(

谢谢。

4 个答案:

答案 0 :(得分:1)

这很简单。

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

<?php

$folders = str_split(564);

$pathToCreateFolder = '';
foreach($folders as $folder) {
   $pathToCreateFolder .= DIRECTORY_SEPARATOR . $folder;
   mkdir($folder);
}

您还可以添加基本路径,其中应将文件夹创建为初始$pathToCreateFolder

在这里,您将找到一个演示:http://codepad.org/aUerytTd

或者你像迈克尔在评论中提到的那样,只用一行:

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

TRUE标志允许mkdir创建文件夹recursivley。而内爆将目录部分放在一起就像5/6/4一样。 DIRECTORY_SEPARATOR是unix机器上的斜杠(/)或Windows上的反斜杠(\)的PHP常量。

答案 1 :(得分:0)

为什么不这样做:

<?php
$directories = str_split(564);

$path = implode(DIRECTORY_SEPARATOR, $directories);

mkdir($path, 0777, true);

答案 2 :(得分:0)

不知道你真正想做什么,但这里有一些提示。

有递归的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
   }
}

使用这些文件夹,您可以轻松地在任何地方创建这样的文件夹,并按照您的号码获取。

答案 3 :(得分:0)

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

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

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

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

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