我正在编写一个库,想要使用项目文件夹创建一个通用的HTML菜单。
我有这个结构:
root menu folders sub-menu folders
01_Home 01_aaa 01_aaa, 02_abb, 03_acc
02_bbb ...
03_ccc ...
$root = 'content';
$fileData = fillArrayWithFileNodes ( new DirectoryIterator ( $root ) );
function fillArrayWithFileNodes(DirectoryIterator $dir) {
$data = array ();
foreach ( $dir as $node ) {
if ($node->isDir () && ! $node->isDot () && $node != 'includes' && $node != 'data') {
$data [$node->getFilename ()] = fillArrayWithFileNodes ( new DirectoryIterator ( $node->getPathname () ) );
}
}
return $data;
}
function transformName($file) {
return str_replace ( '_', ' ', substr ( $file, strpos ( $file, '_' ) + 1 ) );
}
我在这里创建HTML菜单:
<?php
foreach ( array_keys ( $fileData ['01_Home'] ) as $option ) {
?>
<li><a href="content/01_Home/<?php echo $option; ?>"> <strong><?php echo transformName($option); ?></strong></a></li>
<?php
}
?>
有谁知道如何显示子菜单文件夹名称?
答案 0 :(得分:0)
就像你对fillArrayWithNodes所做的那样,我会创建一个帮助函数来显示特定文件夹数组的所有子节点,例如displayChildNodes($folder)
该函数将接收来自$fileData
的关联数组,例如$fileData['01_Home']
。它将包含一个类似for循环的fillArrayWithNodes,除非这次我们检查是否有数据,给定该键。我们通过确定它是否是一个数组来检查(因此它适合fillArrayWithFileNodes中的if条件),以及数组中是否有项目。
foreach($folderArray as $subNodeName => $subNodeNodes) {
//1. Print out the folder name $subNodeName here. (like you did in the example)
//2. if is_array($subNodeNodes) && count($subNodeNodes) > 0, then call displayChildNodes($subNodeNodes)
}