PHP - Bir dizi boyunca recursing zaman göreli bir yol tutarak yardıma ihtiyacım var

0 Cevap php

Şöyle klasörlerinin / dosyaların bir dizi var:

Array
(
    [Root Folder 1] => Array
        (
            [Sub Folder 1] => Array
                (
                    [:files:] => Array
                        (
                            [0] => file 1.txt
                            [1] => file 2.txt
                        )
                )

            [Sub Folder 2] => Array
                (
                    [:files:] => Array
                        (
                            [0] => file.txt
                        )
                )

            [Sub Folder 3] => Array
                (
                    [:files:] => Array
                        (
                            [0] => file.txt
                        )
                )

        )

    [Root Folder 2] => Array
        (
            [Sub Folder 1] => Array
                (
                    [:files:] => Array
                        (
                            [0] => file.txt
                        )
                )

            [Sub Folder 2] => Array
                (
                    [:files:] => Array
                        (
                            [0] => file.txt
                        )
                )

            [Sub Folder 3] => Array
                (
                    [:files:] => Array
                        (
                            [0] => file.txt
                        )
                )
        )
)

Temelde, ben tuşları olarak klasör adları ve klasörler içinde, o klasörün içindeki tüm dosyaların listesini içeren bir :files: anahtar yoktur.

Ben dizi veri yankılanan zaman o dosyaya bir 'tam yol' yaratıyor sorun yaşıyorum neler. Örneğin, ben bu gibi bakmak yolları gerekir:

Root Folder 1\Sub Folder 1\file 1.txt
Root Folder 1\Sub Folder 1\file 1.txt
Root Folder 1\Sub Folder 2\file1.txt

Benim şu anki işlev şöyle:

function format_tree($array, $map, $currentPath=null)
{
    if (!is_array($array))
        return;

    foreach ($array as $key => $value)
    {
        if ($key != ':files:')
        {
            $currentPath = $currentPath . DS . $key;

            echo '<div class="folder"><span style="display: block; font-weight: bold" title="' . $currentPath . '"><span>' . $key . '</span></span><div class="contents">';

            format_tree($value, $map, $currentPath);

            echo '</div></div>';
        }
        else
        {
            for ($i = 0; $i < count($value); $i++)
            {
                $path = $currentPath . DS . $value[$i];
                echo '<span class="file" style="display: block" title="' . $path . '"><span><a href="/public/uploads/' . $path . '" target="_blank">' . $value[$i] . '</a></span></span>';
            }
        }
    }
}

Onunla sorun bir dizin çıkarken $currentPath 'reset' alır asla. Bu, böyle yolları sonuçları:

Root Folder 1\Sub Folder 1\file 1.txt
Root Folder 1\Sub Folder 1\file 1.txt
Root Folder 1\Sub Folder 1\Sub Folder 2\file1.txt

Dizinin (klasör adı) geçerli anahtar eski dizin yoluna eklenir alır gibi.

Bunu nasıl düzeltebilirim?

0 Cevap