我想创建一个这样的归档列表:
- 2016
- 2016 年 7 月
- 测试 16 个中的 5 个
- 测试 16 项中的 4 项
- 测试 16 个中的 3 个
- 测试 16 个中的 2 个
- 2016 年 2 月
- 测试 16 个中的 1 个
- 2016 年 7 月
- 2015
- 2015 年 11 月
- 测试 15 次中的 1 次
- 2015 年 11 月
但它是这样显示的:
- 2016
- 2016 年 7 月
- 测试 16 个中的 5 个
- 测试 16 项中的 4 项
- 测试 16 个中的 3 个
- 测试 16 个中的 2 个
- 2016 年 2 月
- 测试 16 个中的 1 个
- 2015 年 11 月
- 测试 15 次中的 1 次
- 2016 年 7 月
- 2016
- 2016 年 7 月
- 测试 16 个中的 5 个
- 测试 16 项中的 4 项
- 测试 16 个中的 3 个
- 测试 16 个中的 2 个
- 2016 年 2 月
- 测试 16 个中的 1 个
- 2015 年 11 月
- 测试 15 次中的 1 次
- 2016 年 7 月
- 2015
- 2016 年 7 月
- 测试 16 个中的 5 个
- 测试 16 项中的 4 项
- 测试 16 个中的 3 个
- 测试 16 个中的 2 个
- 2016 年 2 月
- 测试 16 个中的 1 个
- 2015 年 11 月
- 测试 15 次中的 1 次
- 2016 年 7 月
这是我的源代码:
$query = "SELECT * FROM blogs ORDER BY date DESC";
$resultSet = mysql_query($query);
if (mysql_num_rows($resultSet)){
$newsArray = array();
echo '<ul>' . PHP_EOL;
while ($newsResult = mysql_fetch_array($resultSet)){
$newDate = $newsResult['date'] ;
$timePeriod = date('F Y ',strtotime($newDate));
$timePeriodY = date('Y',strtotime($timePeriod));
$timePeriodM = date('F',strtotime($timePeriod));
/*if (!isset($newsArray[$timePeriod])){
$newsArray[$timePeriod] = array();
}*/
$newsArray[$timePeriod][] = $newsResult;
}
//by year
foreach ($newsArray as $timePeriod => $newsItems){
$timePeriodY = date('Y',strtotime($timePeriod));
echo '<li><strong>' . $timePeriodY . '</strong>' . PHP_EOL;
echo '<ul>' . PHP_EOL;
//by month
foreach ($newsArray as $timePeriod => $newsItems){
echo '<li><strong>' . $timePeriod . '</strong>' . PHP_EOL;
echo '<ul>' . PHP_EOL;
//news items
foreach ($newsItems as $item){
echo '<li>';
echo '<a href="'.$wwwUrl.'press-releases/'.$item["id"].'/'.$item["titlename"].'.php">'.$item["titlename"].'</a>';
echo '</li>' . PHP_EOL;
}
//end by month
echo '</ul>' . PHP_EOL;
echo '</li>' . PHP_EOL;
}
//end by year
echo '</ul>' . PHP_EOL;
echo '</li>' . PHP_EOL;
}
echo '<li> </li>' . PHP_EOL;
echo '</ul>' . PHP_EOL;
} else {
echo 'No Blog Found';
}
请帮我解决这个问题,在此先感谢您。
最佳答案
当您应该按“Y”然后按“F Y”“分组”时,您按“F Y”“分组”
例如:
$newsArray[$timePeriod][] = $newsResult;
应该是这样的
$newsArray[$timePeriodY][timePeriod][]= $newsResult;
您的代码将变为:
$query = "SELECT * FROM blogs ORDER BY date DESC";
$resultSet = mysql_query($query);
if (mysql_num_rows($resultSet)){
$newsArray = array();
echo '<ul>' . PHP_EOL;
while ($newsResult = mysql_fetch_array($resultSet)){
$newDate = $newsResult['date'] ;
$timePeriod = date('F Y ',strtotime($newDate));
$timePeriodY = date('Y',strtotime($timePeriod));
$timePeriodM = date('F',strtotime($timePeriod));
$newsArray[$timePeriodY][$timePeriod][] = $newsResult;
}
//by year
foreach ($newsArray as $timePeriodY => $newsItems){
echo '<li><strong>' . $timePeriodY . '</strong>' . PHP_EOL;
echo '<ul>' . PHP_EOL;
//by month
foreach ($newsItems as $timePeriod => $items){
echo '<li><strong>' . $timePeriod . '</strong>' . PHP_EOL;
echo '<ul>' . PHP_EOL;
//news items
foreach ($items as $item){
echo '<li>';
echo '<a href="'.$wwwUrl.'press-releases/'.$item["id"].'/'.$item["titlename"].'.php">'.$item["titlename"].'</a>';
echo '</li>' . PHP_EOL;
}
//end by month
echo '</ul>' . PHP_EOL;
echo '</li>' . PHP_EOL;
}
//end by year
echo '</ul>' . PHP_EOL;
echo '</li>' . PHP_EOL;
}
echo '<li> </li>' . PHP_EOL;
echo '</ul>' . PHP_EOL;
} else {
echo 'No Blog Found';
}
关于php - php 和 mysql 中的组存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39767556/