所以我有一个文件,其中包含看起来像这样的文件路径字符串..
./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/