3

それで、私は文字通りこれを頭に入れようとして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);
    }
?>
4

2 に答える 2

1

次の要素にアクセスしたいようですね。

を使用しないでください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($subdirectories);
$length = sizeof($keys);
for ($i = 0; $i < $length; $i++)
{
    $currentDirectory = $directory . "/" . $subdirectory;
    $structure[$node] = $this->GetStructure($subdirectories[$i]);
}
于 2012-08-16T19:39:57.887 に答える
0

変更するだけです:

$this->GetStructure(); // <-- how to I call the function?

に:

GetStructure($currentDirectory);
于 2012-08-16T21:21:18.123 に答える