将PHP数组按列排序

6

我有一个MySQL表,包含以下字段:

名称 - 年份 - 描述

我希望按照年份顺序显示,并按十年分成两列。我的PHP技能相当薄弱,所以我只知道如何通过基于年份范围的单独查询来完成这个目标。

<?php
echo "<div><h3>1950</h3>";
    $list1950 = mysql_query("SELECT * FROM people WHERE class_year1 > '1949' AND class_year1 < '1960' ORDER BY class_year1, last_name",$db);

    while ($thearray = mysql_fetch_array($list1950)) {
        echo "<div>$thearray[name] - $thearray[class_year1]<br />$thearray[description]</div>"; 
    }
echo "</div>";
echo "<h3>1960</h3><div>";
    $list1960 = mysql_query("SELECT * FROM people WHERE class_year1 > '1959' AND class_year1 < '1970' ORDER BY class_year1, last_name",$db);

    while ($thearray = mysql_fetch_array($list1960)) {
        echo "<div>$thearray[name] - $thearray[class_year1]<br />$thearray[description]</div>"; 
    }
echo "</div>";
?>

我知道有一种更简单/更有效的方法来完成这个任务。可以帮忙吗?
谢谢。
1个回答

5
我会这样做:
$list = mysql_query("SELECT * FROM people ORDER BY class_year1, last_name",$db);

$decade = false;
while ($thearray = mysql_fetch_array($list)) {

    // checks if decade is diferent, if so updates and prints it
    if( $decade != substr($thearray['class_year'], 2, 1) ) {
        // every time we change decade we print a DIV
        if($decade!==false) echo "</div>";

        $decade = substr($thearray['class_year'], 2, 1);
        echo "<div><h3>19".$decade."0</h3>";
    }

    // prints info for each row
    echo "<div>".$thearray['name']." - ".$thearray['class_year1']."<br />".$thearray['description']."</div>"; 

}

// we print another DIV in the end to close it right
echo "</div>";

这样,您可以轻松更新函数以显示1800年代和2000年代,而无需硬编码全部内容。

希望对您有所帮助!


感谢回复。我使用 substr 来使用 ['class_year'],2, 1,这样它现在可以抓取十年。但是我意识到所有属于一个十年的条目后面都需要有一个 </div>。怎么做最好? - Voodoo
@Voodoo更新了代码。如果它按预期工作,请告诉我。它不是很漂亮。理想情况下,您不必将所有条目封装在DIV中... - Frankie
谢谢你,Frankie。这个更新很好用。虽然我必须将 substr 保持在 2,1(而不是你写的 3,1)才能获取正确的年份数字。再次感谢。是的,既然我已经让它工作了,我应该从 <div> 切换到 <li> 的方法。 - Voodoo
@Voodoo 很高兴它能够正常工作!感谢您的更正!我是凭记忆完成的,实际上错过了范围! :) 已相应地编辑了该帖子。 - Frankie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接