【问题标题】:php mkdir folder tree from array来自数组的php mkdir文件夹树
【发布时间】:2014-05-17 20:38:05
【问题描述】:

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

$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不太熟悉,抱歉:(

谢谢。

【问题讨论】:

  • 在此期间想通了,感谢一个比我更聪明的人:)$folders = str_split(564); mkdir(implode('/',$folders),0777,true);

标签: php arrays mkdir


【解决方案1】:

这很简单。

为每个循环遍历文件夹数组并创建一个字符串,在每个循环上附加下一个子文件夹:

<?php

$folders = str_split(564);

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

您还可以将创建文件夹的基本路径添加到初始$pathToCreateFolder

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

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

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

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

【讨论】:

  • 如果你使用$recursive参数到mkdir()就更简单了,完全消除了循环。 us3.php.net/manual/en/function.mkdir.php
  • $path = implode(DIRECTORY_SEPARATOR, $folders); mkdir($path, 0777, true);
【解决方案2】:

为什么不直接做:

<?php
$directories = str_split(564);

$path = implode(DIRECTORY_SEPARATOR, $directories);

mkdir($path, 0777, true);

【讨论】:

    【解决方案3】:

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

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

    有了这些,您可以轻松地在任何您想要的地方创建此类文件夹,并通过您的号码获取它们。

    【讨论】:

    • 天哪,停止使用@ 来抑制错误。处理错误。
    • @HoshSadiq set_error_handler 权限错误代码不需要回答问题,因此它只是一个示例。我想,读者应该自己决定如何处理它。
    【解决方案4】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多