隐藏数组到ul li列表

PhD*_*ira 1 html php arrays html-lists multidimensional-array

所以我有一个文件路径,看起来像这样的文件路径. ./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
Run Code Online (Sandbox Code Playgroud)

等等...

这是我正在使用的阵列.我用以下功能输出了这个.

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"
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我把它转换成一个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;
}   
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!谢谢.

irc*_*ell 6

我已经在@hakre的回答中重构了那个令人难以置信的代码,但是稍微不那么敬畏了.它使用相同的aglorithm:

$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';
Run Code Online (Sandbox Code Playgroud)

这些是内部函数,您无需直接调用.

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>";
}
Run Code Online (Sandbox Code Playgroud)

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

function createTree($string) {
    $paths = splitIntoPaths($string);
    return createListFromArray($paths);
}
Run Code Online (Sandbox Code Playgroud)

用法:

$tree = createTree($file);
Run Code Online (Sandbox Code Playgroud)