php - php 和 mysql 中的组存档

标签 php mysql foreach

我想创建一个这样的归档列表:

  • 2016
    • 2016 年 7 月
      • 测试 16 个中的 5 个
      • 测试 16 项中的 4 项
      • 测试 16 个中的 3 个
      • 测试 16 个中的 2 个
    • 2016 年 2 月
      • 测试 16 个中的 1 个
  • 2015
    • 2015 年 11 月
      • 测试 15 次中的 1 次

但它是这样显示的:

  • 2016
    • 2016 年 7 月
      • 测试 16 个中的 5 个
      • 测试 16 项中的 4 项
      • 测试 16 个中的 3 个
      • 测试 16 个中的 2 个
    • 2016 年 2 月
      • 测试 16 个中的 1 个
    • 2015 年 11 月
      • 测试 15 次中的 1 次
  • 2016
    • 2016 年 7 月
      • 测试 16 个中的 5 个
      • 测试 16 项中的 4 项
      • 测试 16 个中的 3 个
      • 测试 16 个中的 2 个
    • 2016 年 2 月
      • 测试 16 个中的 1 个
    • 2015 年 11 月
      • 测试 15 次中的 1 次
  • 2015
    • 2016 年 7 月
      • 测试 16 个中的 5 个
      • 测试 16 项中的 4 项
      • 测试 16 个中的 3 个
      • 测试 16 个中的 2 个
    • 2016 年 2 月
      • 测试 16 个中的 1 个
    • 2015 年 11 月
      • 测试 15 次中的 1 次

这是我的源代码:

$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>&nbsp;</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>&nbsp;</li>' . PHP_EOL;   
echo '</ul>' . PHP_EOL; 
} else {
echo 'No Blog Found';
}

关于php - php 和 mysql 中的组存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39767556/

相关文章:

php - 如何在 PHP 中展开多维数组(原始键访问路径存储为单个键)?

python - 使用 Python 插入 MySQL 表

mysql - 如何确定 MySQL 排序规则是否区分大小写?

R:foreach 不适用于导出图形,例如 png 或 ggsave

c# - 如何制作带有嵌套字幕的 C# foreach?

php - PHP 中的 ${$var .'s_array' } 语法是什么?

php - session 和 mysql 的问题

PHP 代码在 Windows 上工作但卡在 Linux 上

mysql - Request.form 返回带逗号的值

c# - 在 linq 中,如何从列表中取出特定参数并构建不同类型的新列表?