我想创建这样的存档列表:
二千零一十六
2016年7月
测试5/16
测试4/16
测试3/16
测试2/16
2016年2月
测试1/16
二千零一十五
2015年11月
测试1/15
但它是这样显示的:
二千零一十六
2016年7月
测试5/16
测试4/16
测试3/16
测试2/16
2016年2月
测试1/16
2015年11月
测试1/15
二千零一十六
2016年7月
测试5/16
测试4/16
测试3/16
测试2/16
2016年2月
测试1/16
2015年11月
测试1/15
二千零一十五
2016年7月
测试5/16
测试4/16
测试3/16
测试2/16
2016年2月
测试1/16
2015年11月
测试1/15
这是我的源代码:

$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';
}

请帮我做这个,提前谢谢。

最佳答案

你是按“F Y”分组,而你应该按“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';
}

09-05 16:18