我是PHP的新手,希望能够帮助从目录中包含的文件创建菜单。当我添加文件时,我希望菜单自动添加项目。
目录中的文件是.htm文件,命名约定是年份,然后是月份用下划线分隔,即2013_6.htm(2013年6月)
我希望能够阅读这些文件,然后从这些文件中创建一个菜单。
我已经成功创建了一个文件的排序数组,就像这样(工作正常):
$dir = "$cal_path";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
if ($filename != "." && $filename != ".."){
$files[] = $filename;
}
}
sort($files);
我现在如何将这个文件数组放入一个菜单项列表中,然后我可以使用CSS进行样式设置,如下所示,其中xxxx是文件名中的年份,yy是文件名中的月份。
$cal_menu =
<ul>
<li><a href="$base_url/calendar_view?year=xxxx&month=yy">June 2013</a></li>
<li>etc</li>
<li>etc</li>
</ul>
我创建了一个月份数组和相应的月份名称
$CalendarMonth = array("1"=>"January","2"=>"February","3"=>"March","4"=>"April","5"=>"May","6"=>"June","7"=>"July","8"=>"August","9"=>"September","10"=>"October","11"=>"November","12"=>"December");
我希望我已正确解释了我的问题。 非常感谢提前。
答案 0 :(得分:1)
您可以尝试以下代码:
编辑,因为您希望将该输出保存在变量上。
rsort($files);
$cal_menu = '<ul>';
foreach($files as $file){
preg_match('/(\d{4})_(\d.*).htm/i', $file, $date);
$mont_name = $CalendarMonth[$date[2]];
$cal_menu .= '<li><a href="$base_url/calendar_view?year='.$date[1].'&month='.$date[2].'">'.$mont_name.' '.$date[1].'</a></li>';
}
$cal_menu .= '</ul>';
此代码以您需要的格式设置每个 li 项目的输出:?year = xxxx&amp; month = yy
看到它正常工作here。
答案 1 :(得分:0)
试试这个
foreach ($files as $file) {
// pathinfo will return an array containing
// dirname,basename,extension,filename then use extract
// to convert the array into variables
extract(pathinfo($file));
echo "<li><a href="$file">$filename</a></li>"
}
</ul>
详细了解pathinfo http://php.net/manual/en/function.pathinfo.php 阅读有关提取http://us2.php.net/manual/en/function.extract.php
的更多信息答案 2 :(得分:0)
foreach ($files as $file) {
preg_match('/^(\d{4})_(\d{1,2}}/', $file, $match); // Parse filename into YYYY_MM
$year = $match[1];
$month = $match[2];
$monthname = $CalendarMonth[$month];
// Interpolate these into HTML output
echo "<ul>
<li><a href='$base_url/calendar_view?year=$year&month=$month'>$monthname $year</a></li>
<li>etc</li>
</ul>\n";
}
答案 3 :(得分:0)
使用循环,使用pathinfo
从每个文件名中提取数据。您可以在现有循环中执行此操作,但此处为foreach
:
echo '<ul>';
foreach($files as $filename) {
$f_info = pathinfo($dir . '/' . $filename);
$extension_length = strlen('.' . $f_info['extension']);
$f_parts = substr($f_info['filename'], 0, -$extension_length);
$year = $f_parts[0];
$month = $f_parts[1];
echo '<li><a href="' . $base_url . '/calendar_view?year=' . $year .
'&month=' . $month . 'yy">' . $CalendarMonth[$month] . ' ' .
$year . '</a></li>';
}
echo '</ul>';
在使用array_key_exists
之前,您可能希望使用$month
来验证$CalendarMonth
中$CalendarMonth[$month]
是否确实存在。
答案 4 :(得分:0)
试试this示例。它应该给你一个想法。