【问题标题】:How to create nested directory from array in php如何在php中从数组创建嵌套目录
【发布时间】:2016-03-31 12:04:46
【问题描述】:

在 laravel 中,我正在尝试使用控制台创建文件。我将创建的文件是一个特征文件。我的情况是,如果我只写文件名,它会根据需要创建。但是当作为目录传递时,它不会被创建。

数组可以是动态的。目录的深度由用户决定。

仅举个例子:我采用 2 级目录。

我的数组是:

Array
(
    [0] => 'RootTrait' // the root place of the trait folder
    [1] => 'Level-1' // Directory inside the trait folder
    [2] => 'Level-2' // Directory inside the Level-1 folder
    [3] => 'file.php' // The file that will be created inside Level 2 folder
)

我应该怎么做才能做到这一点?

到目前为止我尝试过的代码是:

/**
 * Process the creation of trait file.
 * 
 * @param  string $traitName
 * @param  \Illuminate\Filesystem\Filesystem $file
 * @param  string $nameSpace
 * @return bool
 */
 public function processTraitFile($traitName, Filesystem $file, $nameSpace = 'App')
 {
     $traitFileName = $file->get('app/stubs/Trait.stub');

     $newTraitFile = str_replace(['TraitName', 'App'], [$traitName, $nameSpace], $traitFileName);

     if (! file_exists("app/Http/Traits/{$traitName}")) {
         $traitFolders = explode('/', $traitName);
         $lastElement = array_pop($traitFolders);

         foreach ($traitFolders as $key => $folder) {
             $file->makeDirectory('app/Http/Traits/' . $folder, 0755, true);
         }
     }

     return $file->put("app/Http/Traits/{$traitName}.php", $newTraitFile);
 }

上述方法确实创建了文件夹,但没有嵌套。它正在创建这样的文件夹:

|-- Root Trait Folder
    |-- Level-1
    |-- Level-2
    |-- file.php

我知道这一定很容易实现,但我失败了。

请帮帮我。谢谢。

【问题讨论】:

    标签: php arrays laravel directory laravel-5.1


    【解决方案1】:

    只需使用mkdir PHP 内置函数和递归选项

    $path = '/folder_1/folder_2/folder_3';
    
    mkdir($path, 0755, true);
    
    

    如果您想了解更多信息,请查看PHP docs

    【讨论】:

      【解决方案2】:

      请使用以下代码

      <?php 
         $n = 'app/Http/Traits/';
         $n .= $traitName;
         mkdir($n, 0755, true);
      ?>
      

      【讨论】:

        【解决方案3】:

        你可以使用dirname:

        // $traitName = 'RootTrait/Level-1/Level-2/file.php';
        
        if (! $file->exists("app/Http/Traits/{$traitName}")) {
            $traitFolders = dirname($traitName);
        
            $file->makeDirectory('app/Http/Traits/' . $traitFolders, 0755, true);
        }
        
        return $file->put("app/Http/Traits/{$traitName}", $newTraitFile);
        

        【讨论】:

          【解决方案4】:

          我会简单地改变你的 for 循环

          $n = 'app/Http/Traits/';
          foreach ($traitFolders as $key => $folder) {
                   $file->makeDirectory($n. $folder, 0755, true);
                   $n .= $folder.'/';
               }
          

          【讨论】:

            猜你喜欢
            • 2011-09-28
            • 1970-01-01
            • 2020-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-25
            相关资源
            最近更新 更多