PHP - 按第一个字母对行进行分组

标签 php mysql string select indexing

<分区>

我试图以一种有条理和清晰的方式显示我的数据库中的一些元素,但我找不到合适的解决方案。假设我在数据库中有这些行:apple、anchor、beat、cover、classmate、curtain...我需要像这样显示它们:

A
apple
anchor

B
beat

C
cover
classmate
curtain

因此,根据单词的第一个字母,有单独的 div 和单独的类。我可以用 mysql 查询创建一个类来选择 $char 之类的名称,其中 $char 是一个参数,并按 A-Z 时间重复该类......但我不喜欢这样,因为手动工作太多了。你有什么建议吗?

最佳答案

您希望列表完全按字母顺序排列吗?或者只是按首字母分组?您是否关心不以任何单词开头的字母是否不显示为标题?例如,如果您没有任何以“x”开头的词,您是否仍需要看到下面没有任何内容的“X”类别,还是应该从“W”跳到“Y”?

确切的实现可能会因这些问题的答案而异。这是一个应该完全按字母顺序显示列表的解决方案,跳过其中没有单词的类别。 (不确定您想要哪种标记;这很简单)。

$result = mysql_query("SELECT col FROM table ORDER BY col");
$lastFoundLetter = '';
while($row = mysql_fetch_array($result)) {
    //get the first letter of the current record
    $firstLetter = substr($row['col'], 0, 1);
    if ($firstLetter != $lastFoundLetter) {
        //you've started a new letter category
        if ($lastFoundLetter != '') {
            //if there's a real value in $lastFoundLetter, we need to close the previous div 
            echo "</div>";
        }
        echo "<div id='" . strtoupper($firstLetter) . "'>";
        echo strtoupper($firstLetter) . "<br/>";
        $lastFoundLetter = $firstLetter;
    }
    echo $row['col']. "<br/>";
}
//close the last div
if ($lastFoundLetter != '') {
    echo "</div>";
}

关于PHP - 按第一个字母对行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778690/

相关文章:

c - 根据命令行参数将字符串合并在一起。

php - 根据 BETWEEN 函数值将 INSERT 上的 DATETIME 值分配给 DB

php 代码中的 javascript window.open

javascript - 无法在 netbeans 中包含 jquery

php - 无法从 php 连接到 MySQL "Connection Refused"

mysql - mysql 查询中的 REPLACE 和 SET

mysql - 在 vb.net 中将 sql 数据添加到 DB 是否需要 .ExecuteNonQuery()

python - 如何将带有逗号分隔项的字符串转换为 Python 中的列表?

java - Java中如何从字符串模板中获取值

javascript - 为 FB 发送添加自定义按钮