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
)