在PHP中创建一个字母表,根据数据库中的名称只包含一些字母

在PHP中创建一个字母表,根据数据库中的名称只包含一些字母,php,mysql,alphabet,Php,Mysql,Alphabet,我有一个包含许多名称的数据库(SQL),我想创建按字母顺序排列的按钮,以便轻松导航。我发现了很多关于如何用PHP创建字母表的例子。但是,我想根据数据库中的名称,构建一个只包含有效字母的字母表 例如: 数据库列出:安德森、贝雷斯福德、多诺万、艾默生、格雷厄姆 我希望字母表显示为:A B d E G (请注意,C和F不会出现) 我能想到的唯一办法就是 -选择数据库中的每个名称, -按姓氏订购 -逐个循环,找到第一个字符是什么,将其保存到数组中, -循环到第二个字符,获取第一个字符,查看它是否已经存在

我有一个包含许多名称的数据库(SQL),我想创建按字母顺序排列的按钮,以便轻松导航。我发现了很多关于如何用PHP创建字母表的例子。但是,我想根据数据库中的名称,构建一个只包含有效字母的字母表

例如:

数据库列出:安德森、贝雷斯福德、多诺万、艾默生、格雷厄姆

我希望字母表显示为:A B d E G

(请注意,C和F不会出现)

我能想到的唯一办法就是

-选择数据库中的每个名称, -按姓氏订购 -逐个循环,找到第一个字符是什么,将其保存到数组中, -循环到第二个字符,获取第一个字符,查看它是否已经存在于数组中,以及是否忽略它 -不断地这样做,直到我只剩下一组未重复的字母

这是唯一的办法吗?还是我错过了一个更简单的解决方案

提前感谢。

选择不同的子字符串(lastname,1,1)“首字母”
来自人们
按初始ASC订购
请记住,这是对数据库中的每一行执行的字符串操作,然后是未索引的排序操作。一旦桌子变大,它就不会有好的表现

SELECT LEFT(name, 1) AS firstletter 
FROM database 
GROUP BY firstletter
ORDER BY last_name 

对我来说很有用。

如果你的名字已经被拉进了一个数组,你可以使用这样的东西(快速而肮脏,可能是为了满足你的需要而过度杀戮,但效果不错!)



这里的工作示例:

您可以使用LEFT(colName,1)只返回列中的第一个字符。我不确定用这个来获取字母表的最好方法是。。。可能选择DISTINCT LEFT(colName,1)或类似的东西?如果数据库上有大量负载,OP可能希望编写一个array_filter函数或类似的函数来在PHP端进行处理。谢谢!我知道必须有一个更简单的方法。我正要问一个类似于线程的问题。非常感谢。
<?php

$names = array('Anderson','Beresford','Donovan','Emerson','Graham');

$alphabet = array();
$previous_letter = '';

foreach($names as $value) {
  if($value[0] != $previous_letter) {
    $alphabet[] = $previous_letter = $value[0];
  }
}

print_r($alphabet);

?>