それで、私は文字通りこれを頭に入れようとして2日を費やしました。ダートリーから多次元配列を作成する関数が欲しいです。以前に手動で実行したところ、次の結果が得られました。
Array ()
[cats] = Array()
[domestic] = Array ()
[wild] = Array ()
[dogs] = Array ()
[big] = Array ()
[small] = Array ()
[emptyfolder]
手動とは、関数内で次のようなことを行うことを意味します。$result['level1']['level2'] = array();
これは、ダートリーの深さが事前にわからないため、うまく機能しません。
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);
}
?>