gpt4 book ai didi

php - 在php中将数组显示为树结构

转载 作者:行者123 更新时间:2023-12-04 15:53:52 25 4
gpt4 key购买 nike

我有一个数组:

Array
(
[0] => dir0|file0.txt
[1] => dir0|file1.txt
[2] => dir1|file2.txt
[3] => dir1|filea.txt
[4] => dir2|fileb.txt
)

我希望它显示为一棵树,例如:

dir0
file0.txt
file1.txt
dir1
file2.txt
filea.txt
dir2
fileb.txt

谁能解释一下我该怎么做?

编辑:为多维数组更新:

$paths[0][0] = 'dir0|file0.txt';
$paths[0][1] = 400;
$paths[1][0] = 'dir0|filea.txt';
$paths[1][1] = 500;
$paths[2][0] = 'dir1|file1.txt';
$paths[2][1] = 600;
$paths[3][0] = 'dir1|fileb.txt';
$paths[3][1] = 700;
$paths[4][0] = 'dir2|filec.txt';
$paths[4][1] = 700;

我希望输出为:

dir0 (900)
file0.txt (400)
filea.txt (500)
dir1 (1300)
file1.txt(600)
fileb.txt (700)
dir2 (700)
filec.txt (700)

需要在root中添加并显示这些值。

最佳答案

最好的方法是重新格式化数组,这样键就是目录,数组值就是包含文件名的数组,如下所示:

$array = array( ..);
$reformatted = array();
foreach( $array as $k => $v) {
list( $key, $value) = explode( '|', $v);
if( !isset( $reformatted[$key]))
$reformatted[$key] = array();
$reformatted[$key][] = $value;
}

然后你只需要遍历新数组,像这样:

foreach( $reformatted as $dir => $files) {
echo $dir . "\n";
foreach( $files as $file)
echo "\t" . $file . "\n";
}

outputs :

dir0
file0.txt
file1.txt
dir1
file2.txt
filea.txt
dir2
fileb.txt

请注意,这仅适用于纯文本环境(例如 <pre></pre>,就像在演示中一样)。否则,您需要使用 <br />而不是 \n对于换行符,或使用有序或无序列表。

对于 HTML 输出,使用这个,它的输出可以是 seen here

echo '<ul>';
foreach( $reformatted as $dir => $files) {
echo "<li>$dir</li>";
echo '<ul>';
foreach( $files as $file)
echo "<li>$file</li>";
echo '</ul>';
}
echo '</ul>';

生成:

  • dir0
    • file0.txt
    • file1.txt
  • dir1
    • < li>file2.txt
    • filea.txt
  • dir2
    • fileb.txt

对于更新后的阵列,解决方案如下:

$reformatted = array(); $weights = array();
foreach( $paths as $k => $v) {
list( $key, $value) = explode( '|', $v[0]);

if( !isset( $reformatted[$key]))
$reformatted[$key] = array();

if( !isset( $weights[$key]))
$weights[$key] = 0;

$reformatted[$key][] = array( $value, $v[1]);
$weights[$key] += $v[1];
}

foreach( $reformatted as $dir => $files) {
echo $dir . ' (' . $weights[$dir] . ")\n";
foreach( $files as $file)
echo "\t" . $file[0] . ' (' . $file[1] . ")\n";
}

outputs :

dir0 (900)
file0.txt (400)
filea.txt (500)
dir1 (1300)
file1.txt (600)
fileb.txt (700)
dir2 (700)
filec.txt (700)

如有必要,我会把它翻译成 HTML 交给你。

关于php - 在php中将数组显示为树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com