Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何转换ul li列表中目录树结构/文件的数组和大小_Php_Arrays - Fatal编程技术网

Php 如何转换ul li列表中目录树结构/文件的数组和大小

Php 如何转换ul li列表中目录树结构/文件的数组和大小,php,arrays,Php,Arrays,我在数组中有一个目录树,如下所示 其中,键是完整文件路径,值是文件大小 Array ( [directory1\file1.jpg] => 197602 [directory1\file2.jpg] => 274893 [directory2\file1.txt] => 41 [directory2\file2.txt] => 41 [directory2\sub-directory1\file1.txt] => 47

我在数组中有一个目录树,如下所示

其中,键是完整文件路径,值是文件大小

Array
(
    [directory1\file1.jpg] => 197602
    [directory1\file2.jpg] => 274893
    [directory2\file1.txt] => 41
    [directory2\file2.txt] => 41
    [directory2\sub-directory1\file1.txt] => 47
    [directory2\sub-directory1\file2.txt] => 41
    [directory2\sub-directory1\file3.txt] => 47
    [file1.txt] => 41
    [file2.txt] => 47
)
我正在尝试使用ulli创建目录树,如下所示

<ul class="filetree">
    <li class="closed"><span class="folder">directory1</span>
        <ul>
            <li class="hvr"><span class="file">file1.jpg</span><span></span><span class="right">197602</span></li>
            <li class="hvr"><span class="file">file2.jpg</span><span></span><span class="right">274893</span></li>
        </ul>
    </li>

    <li class="closed"><span class="folder">directory2</span>
        <ul>
            <li class="closed"><span class="folder">sub-directory1</span>
                <ul>
                    <li class="hvr"><span class="file">file1.txt</span><span></span><span class="right">47</span></li>
                    <li class="hvr"><span class="file">file2.txt</span><span></span><span class="right">41</span></li>
                    <li class="hvr"><span class="file">file3.txt</span><span></span><span class="right">47</span></li>
                </ul>
            </li>
            <li class="hvr"><span class="file">file1.txt</span><span></span><span class="right">41</span></li>
            <li class="hvr"><span class="file">file2.txt</span><span></span><span class="right">41</span></li>
        </ul>
    </li>
    <li class="hvr"><span class="file">file1.txt</span><span></span><span class="right">41</span></li>
    <li class="hvr"><span class="file">file2.txt</span><span></span><span class="right">47</span></li>
</ul>

因此,根据数组中的元素创建html将更容易。

尝试以下方法:

$array =  array(
        'directory1\file1.jpg' => 197602,
        'directory1\file2.jpg' => 274893,
        'directory2\file1.txt' => 41,
        'directory2\file2.txt' => 41,
        'directory2\sub-directory1\file1.txt' => 47,
        'directory2\sub-directory1\file2.txt' => 41,
        'directory2\sub-directory1\file3.txt' => 47,
        'file1.txt' => 41,
        'file2.txt' => 47
    );
$result=array();


foreach ($array as $key => $value) {
    if (strpos($key,'\\') !== false) {
        $key = explode("\\", $key);
        if(isset($key[1]) && !isset($key[2])){
            $result[$key[0]][$key[1]] = $value;
        }
        if(isset($key[2])){
            $result[$key[0]][$key[1]][$key[2]] = $value;
        }
    }else{
        $result[$key] = $value;
    }
}
print_r($result);
输出

Array
(
    [directory1] => Array
        (
            [file1.jpg] => 197602
            [file2.jpg] => 274893
        )

    [directory2] => Array
        (
            [file1.txt] => 41
            [file2.txt] => 41
            [sub-directory1] => Array
                (
                    [file1.txt] => 47
                    [file2.txt] => 41
                    [file3.txt] => 47
                )

        )

    [file1.txt] => 41
    [file2.txt] => 47
)

感谢您的输入,它看起来像是简化的目录结构,但它只适用于2个目录深度,我如何才能为n个目录深度创建一些内容。您只需要测试
$key=explode(“\\”,$key)中有多少元素并播放:)
$array =  array(
        'directory1\file1.jpg' => 197602,
        'directory1\file2.jpg' => 274893,
        'directory2\file1.txt' => 41,
        'directory2\file2.txt' => 41,
        'directory2\sub-directory1\file1.txt' => 47,
        'directory2\sub-directory1\file2.txt' => 41,
        'directory2\sub-directory1\file3.txt' => 47,
        'file1.txt' => 41,
        'file2.txt' => 47
    );
$result=array();


foreach ($array as $key => $value) {
    if (strpos($key,'\\') !== false) {
        $key = explode("\\", $key);
        if(isset($key[1]) && !isset($key[2])){
            $result[$key[0]][$key[1]] = $value;
        }
        if(isset($key[2])){
            $result[$key[0]][$key[1]][$key[2]] = $value;
        }
    }else{
        $result[$key] = $value;
    }
}
print_r($result);
Array
(
    [directory1] => Array
        (
            [file1.jpg] => 197602
            [file2.jpg] => 274893
        )

    [directory2] => Array
        (
            [file1.txt] => 41
            [file2.txt] => 41
            [sub-directory1] => Array
                (
                    [file1.txt] => 47
                    [file2.txt] => 41
                    [file3.txt] => 47
                )

        )

    [file1.txt] => 41
    [file2.txt] => 47
)