gpt4 book ai didi

Php递归目录创建

转载 作者:搜寻专家 更新时间:2023-10-31 21:13:27 24 4
gpt4 key购买 nike

我必须创建递归目录并为每个文件夹创建一个文件。我想要这样:

   modules/   modules/default   modules/default/test_module   modules/default/test_module/a   modules/default/test_module/a/test_module.php   modules/default/test_module/m   modules/default/test_module/m/test_module.php   modules/default/test_module/c   modules/default/test_module/c/test_module.php   modules/root   modules/root/test_module   modules/root/test_module/a   modules/root/test_module/a/test_module.php   modules/root/test_module/m   modules/root/test_module/m/test_module.php   modules/root/test_module/c   modules/root/test_module/c/test_module.php   templates   templates/default   templates/default/test_module   templates/default/test_module/test_module.tpl   templates/root   templates/root/test_module   templates/root/test_module/test_module.tpl

But this code generate like this:

   |-- modules   |   |-- default   |   |   |-- root   |   |   |   `-- test_module   |   |   |       |-- a   |   |   |       |   `-- test_module.php   |   |   |       |-- c   |   |   |       |   `-- test_module.php   |   |   |       `-- m   |   |   |           `-- test_module.php   |   |   `-- test_module   |   |       |-- a   |   |       |   `-- test_module.php   |   |       |-- c   |   |       |   `-- test_module.php   |   |       `-- m   |   |           `-- test_module.php   |   |-- root   |   |   |-- index   |   |   |   `-- c   |   |   |       `-- index.php   |   |   |-- modules   |   |   |   |-- a   |   |   |   |   `-- modules.php   |   |   |   |-- c   |   |   |   |   `-- modules.php   |   |   |   `-- m   |   |   |       `-- modules.php   |   |   `-- user   |   |       |-- a   |   |       |   `-- user.php   |   |       |-- c   |   |       |   `-- user.php   |   |       `-- m   |   |           `-- user.php   |   `-- templates   |       `-- root   |           |-- default   |           |   `-- test_module   |           |       `-- test_module.tpl   |           `-- test_module   |               `-- test_module.tpl

Code is:

    protected function createFiles($files, $parent_directory = null)
{
echo $parent_directory."\n</br>\n";
if (!$parent_directory) {
$parent_directory = www;
}
foreach ((array)$files as $key => $value) {
if (is_array($value)) {
if (!is_dir($parent_directory . $key)) {
mkdir($parent_directory . $key,0777);
chmod($parent_directory.$key,0777);
}
$parent_directory .= $key . '/';
$this->createFiles($value, $parent_directory);
} else {
$parent_directory_=$parent_directory.$key . '/';
if(!is_dir($parent_directory_)){
mkdir($parent_directory_,0777);
chmod($parent_directory_,0777);
}
$alias = explode('.',$value);
$alias = $alias[0];
$defaultAjaxContent = <<<AJAX
<?php
class {$alias} extends ajax{
/**
* Autocreated
**/
public function initAjax(){

}
}
?>
AJAX;
$file = fopen($parent_directory_.$value, 'w+');
$write = fwrite($file, $defaultAjaxContent);
if (!$write) {
throw new AjaxCatcher("{$parent_directory_}{$value} oluşturulurken beklenmedik bir hata oluştu. Lütfen tekrar deneyiniz. ");
}
}
}
//$file = fopen($files['default_ajax']);
return 1;
}

不使用递归 mkdir 的原因:

$dirs = array();
$dirs['modules']['default'][$alias]['a'] = $alias . ".php";
$dirs['modules']['default'][$alias]['m'] = $alias . '.php';
$dirs['modules']['default'][$alias]['c'] = $alias . '.php';

$dirs['modules']['root'][$alias]['a'] = $alias . '.php';
$dirs['modules']['root'][$alias]['m'] = $alias . '.php';
$dirs['modules']['root'][$alias]['c'] = $alias . '.php';

$dirs['templates']['root'][$alias] = $alias . '.tpl';
$dirs['templates']['default'][$alias] = $alias . '.tpl';

$this->createFiles($dirs);

谢谢。

最佳答案

我认为带递归的 mkdir 仍然是最好的主意,你需要做的就是连接嵌套的数组键:

    $dirs = array();
$dirs['modules']['default'][$alias]['a'] = $alias . ".php";
$dirs['modules']['default'][$alias]['m'] = $alias . '.php';
$dirs['modules']['default'][$alias]['c'] = $alias . '.php';

$dirs['modules']['root'][$alias]['a'] = $alias . '.php';
$dirs['modules']['root'][$alias]['m'] = $alias . '.php';
$dirs['modules']['root'][$alias]['c'] = $alias . '.php';

$dirs['templates']['root'][$alias] = $alias . '.tpl';
$dirs['templates']['default'][$alias] = $alias . '.tpl';

// concat the keys (flatten the array)...
function prefixKey($prefix, $array) {
$result = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, prefixKey($prefix . $key . '/', $value));
} else {
$result[$prefix . $key] = $value;
}
}
return $result;
}

// this is your function, use the prefixKey function to get the required
// pathstructure directly from your array...
function createFiles($dirs) {
$pathStructure = prefixKey('', $dirs);
// here you have the flatten keys (the path), the value is the file
foreach($pathStructure as $path => $file) {
// use mkdir with
if(!is_dir($path)) {
mkdir($path, 0777, true);
}
// and so on
}

}

关于Php递归目录创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com