Php 递归函数以获取多维子目录数组
所以,我花了两天的时间试图让这个想法进入我的脑海。我想要一个从dirtree创建多维数组的函数。我以前手动执行过,得到了以下结果:Php 递归函数以获取多维子目录数组,php,recursion,multidimensional-array,Php,Recursion,Multidimensional Array,所以,我花了两天的时间试图让这个想法进入我的脑海。我想要一个从dirtree创建多维数组的函数。我以前手动执行过,得到了以下结果: Array () [cats] = Array() [domestic] = Array () [wild] = Array () [dogs] = Array () [big] = Array () [small] = Array () [emptyfolder] 手动
Array ()
[cats] = Array()
[domestic] = Array ()
[wild] = Array ()
[dogs] = Array ()
[big] = Array ()
[small] = Array ()
[emptyfolder]
手动操作的意思是在我的函数中执行类似的操作:$result['level1']['level2']=array()代码>这不起作用,因为我事先不知道dirtree的深度
该函数还使用另一个函数GetSubdirectories($directory)
,该函数返回和数组如下:
[0] = 'cats',
[1] = 'dogs'
[2] = 'emptyfolder'
因此,这里是所讨论的函数:
<?php
public function GetStructure($directory, $node = 'content') //the root folder is content
{
if (!isset($structure))
{
$structure = array();
}
$subdirectories = $this->GetSubdirectories($directory);
if (is_array($subdirectories))
{
foreach ($subdirectories as $subdirectory)
{
//add new subarray
$structure[$node] = array();
//set the current path
$currentDirectory = $directory . "/" . $subdirectory;
//repeat
$this->GetStructure(); // <-- how to I call the function?
}
}
return $structure;
}
?>
据我所知,问题是“告诉函数在哪里放置下一个数组”。我就是不明白,任何帮助都将不胜感激
解决方案
<?php
public function PopulateArrayWithDirtree($dir, &$array = false)
{
$subDirs = $this->GetSubdirectories($dir);
if (is_array($subDirs))
{
for ($i = 0; $i < sizeof($subDirs); $i++)
{
$array[$subDirs[$i]] = array();
$this->PopulateArrayWithDirtree(($dir . "/" . $subDirs[$i]), $array[$subDirs[$i]]); //repeat
}
}
return true;
}
public function Test()
{
$path = $this->contentpath;
$structure = array();
$this->PopulateArrayWithDirtree($path, $structure);
print_r($structure);
}
?>
听起来您想访问下一个元素
不要使用foreach
,而是使用for
循环:
$keys = arraykeys($subdirectories);
$length = sizeof($keys);
for ($i = 0; $i < $length; $i++)
{
$structure[$node] = array();
$currentDirectory = $directory . "/" . $subdirectory;
$this->GetStructure($subdirectories[$i]);
}
$keys=arraykeys($subdirectory);
$length=sizeof($keys);
对于($i=0;$i<$length;$i++)
{
$structure[$node]=array();
$currentDirectory=$directory.“/”$subdirectory;
$this->GetStructure($subdirectories[$i]);
}
但是,如果您的意思是设置结果,那么可能就是这样。我还是很困惑:
$keys = arraykeys($subdirectories);
$length = sizeof($keys);
for ($i = 0; $i < $length; $i++)
{
$currentDirectory = $directory . "/" . $subdirectory;
$structure[$node] = $this->GetStructure($subdirectories[$i]);
}
$keys=arraykeys($subdirectory);
$length=sizeof($keys);
对于($i=0;$i<$length;$i++)
{
$currentDirectory=$directory.“/”$subdirectory;
$structure[$node]=$this->GetStructure($subdirectories[$i]);
}
只需更改:
$this->GetStructure(); // <-- how to I call the function?
好吧,你让我走上了正确的道路。请参见编辑以获取解决方案,谢谢!
GetStructure($currentDirectory);