php - 将数组转换为 ul li 列表

标签 php html arrays multidimensional-array html-lists

所以我有一个文件,其中包含看起来像这样的文件路径字符串.. ./CatDV/S1/SFX/steam/6004_90_04 LargeHeadlightSm.wav ./CatDV/S1/SFX/steam/AirHissPressureRe HIT032001.wav ./CatDV/S1/SFX/steam/Impact_Metal_Bullet_Hit(1).wav ./CatDV/S1/SFX/steam/Impact_Metal_Bullet_Hit.wav ./CatDV/S1/SFX/steam/6004_94_02 LargeHeavyGlassS.wav ./CatDV/S1/SFX/steam/Impact_Glass_Smash.wav ./CatDV/S1/SFX/steam/AirReleaseHeavyAi HIT030701.wav ./CatDV/S1/SFX/steam/SDR02_15SCIF RhythmicRever.wav ./CatDV/S1/SFX/steam/VAL02_08CRSH GlassBreaking.wav ./CatDV/S1/SFX/steam/AirReleaseLargeAi HIT030601.wav ./CatDV/S1/SFX/steam/SDR02_14SCIF Rhythmic3Beat.wav ./CatDV/S1/SFX/steam/6004_94_01 LargeGlassSmash.wav

我想把所有这些拆分成一个 ul li list.so

> CatDV
    > S1
        > SFX
            > steam
                > filename.extension

等等……

这是我正在使用的数组。我用下面的函数得到了这个输出。

array(1) {
  [""]=>
  array(1) {
    ["CatDV"]=>
    array(1) {
      ["S1"]=>
      array(1) {
        ["SFX"]=>
        array(1) {
          ["steam"]=>
          array(12) {
            ["6004_90_04 LargeHeadlightSm.wav"]=>
                string(52) "./CatDV/S1/SFX/steam/6004_90_04 LargeHeadlightSm.wav"
            ["AirHissPressureRe HIT032001.wav"]=>
                string(52) "./CatDV/S1/SFX/steam/AirHissPressureRe HIT032001.wav"
            ["Impact_Metal_Bullet_Hit(1).wav"]=>
                string(51) "./CatDV/S1/SFX/steam/Impact_Metal_Bullet_Hit(1).wav"
            ["Impact_Metal_Bullet_Hit.wav"]=>
                string(48) "./CatDV/S1/SFX/steam/Impact_Metal_Bullet_Hit.wav"
            ["6004_94_02 LargeHeavyGlassS.wav"]=>
               string(52) "./CatDV/S1/SFX/steam/6004_94_02 LargeHeavyGlassS.wav"
            ["Impact_Glass_Smash.wav"]=>
               string(43) "./CatDV/S1/SFX/steam/Impact_Glass_Smash.wav"
            ["AirReleaseHeavyAi HIT030701.wav"]=>
               string(52) "./CatDV/S1/SFX/steam/AirReleaseHeavyAi HIT030701.wav"
            ["SDR02_15SCIF RhythmicRever.wav"]=>
               string(51) "./CatDV/S1/SFX/steam/SDR02_15SCIF RhythmicRever.wav"
            ["VAL02_08CRSH GlassBreaking.wav"]=>
               string(51) "./CatDV/S1/SFX/steam/VAL02_08CRSH GlassBreaking.wav"
            ["AirReleaseLargeAi HIT030601.wav"]=>
              string(52) "./CatDV/S1/SFX/steam/AirReleaseLargeAi HIT030601.wav"
            ["SDR02_14SCIF Rhythmic3Beat.wav"]=>
              string(51) "./CatDV/S1/SFX/steam/SDR02_14SCIF Rhythmic3Beat.wav"
            ["6004_94_01 LargeGlassSmash.wav"]=>
              string(51) "./CatDV/S1/SFX/steam/6004_94_01 LargeGlassSmash.wav"
          }
        }
      }
    }
  }
}

现在,我在将其转换为 ul li 列表时遇到了困难,我可以将其输出到我的 html 中并为其设置样式。

function arch_list($output) {
// //Conditional for Archives Page
    $data = file(get_template_directory_uri() . '/js/angular/data/list_test.txt', FILE_IGNORE_NEW_LINES);

    $path = array('data' => $data);
    $output = array();
    foreach ($path['data'] as $d) {
        $out = preg_split('/(\.)*\//', $d);
        $outArr = $d;
        for ($i = count($out) - 1; $i >= 0; $i--) {             
            $outArr = array($out[$i] => $outArr);               
        }
        // return $outArr;
        $output = array_merge_recursive($output, $outArr);

    }
    return $output;
}   

感谢任何帮助! 谢谢。

最佳答案

我重构了@hakre 的答案中令人敬畏的代码,使其稍微不那么令人敬畏。它使用相同的算法:

$file = './CatDV/S1/SFX/steam/6004_90_04 LargeHeadlightSm.wav
./CatDV/S1/SFX/steam/AirHissPressureRe HIT032001.wav
./CatDV/S1/SFX/steam/Impact_Metal_Bullet_Hit(1).wav
./CatDV/S1/SFX/steam/Impact_Metal_Bullet_Hit.wav
./CatDV/S1/SFX/steam/6004_94_02 LargeHeavyGlassS.wav
./CatDV/S1/SFX/steam/Impact_Glass_Smash.wav
./CatDV/S1/SFX/steam/AirReleaseHeavyAi HIT030701.wav
./CatDV/S1/SFX/steam/SDR02_15SCIF RhythmicRever.wav
./CatDV/S1/SFX/steam/VAL02_08CRSH GlassBreaking.wav
./CatDV/S1/SFX/steam/AirReleaseLargeAi HIT030601.wav
./CatDV/S1/SFX/steam/SDR02_14SCIF Rhythmic3Beat.wav
./CatDV/S1/SFX/steam/6004_94_01 LargeGlassSmash.wav';

这些是内部函数,您不需要直接调用。

function splitIntoPaths($string) {
    $paths = array();
    foreach (explode("\n", $string) as $line) {
        $node = &$paths;
        foreach (explode("/", $line) as $segment) {
            if (!isset($node[$segment])) {
                $node[$segment] = array();
            }
            $node = &$node[$segment];
        }
        $node = $line;
    }
    return $paths;
}

function createListFromArray(array $array) {
    $return = "<ul>";
    foreach ($array as $key => $value) {
        $return .= "<li>" . $key;
        if (is_array($value)) {
            $return .= createListFromArray($value);
        }
        $return .= "</li>";
    }
    return $return . "</ul>";
}

这是为您完成工作的函数,返回一个字符串。

function createTree($string) {
    $paths = splitIntoPaths($string);
    return createListFromArray($paths);
}

用法:

$tree = createTree($file);

关于php - 将数组转换为 ul li 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768155/

相关文章:

javascript - 如何使用jquery在选择框选项中显示数据

php - 存储 PHP 数组的首选方法(json_encode 与序列化)

php - 在 mysql 中连接表以获得单一结果的正确方法

php - 引导表单提交按钮不起作用

php - 如何将自定义数据传递给模板

jquery - 全年查看日历?

javascript - 打印功能不使用 jquery 和 css 打印整个页面

html - 如何使用字体创建边框

Java HashMap关联多维数组无法创建或添加元素

php - 当我将函数 args 连接到 php7.0 扩展中时如何获取它