PHP循环检测每个MySQL字母结果的第一个实例

时间:2014-09-04 01:35:34

标签: php mysql

如果我使用MySQLi使用PHP查询数据库,如何检测字母表中每个字母的第一个实例?

如果我有一张像

这样的表格
ID | name
1    Allen
2    John
3    Sally
4    William

我查询

SELECT * FROM table ORDER BY name ASC

我的循环中是否可以显示“如果这是您第一次看到name中的字符串以字母A”开头,echo <a id="a"></a>来创建锚标记?然后它将继续为B,C,D,E,F,G等做同样的事情。然后我可以创建一个按字母顺序排列的传奇。

这是我的查询和循环:

$query = "SELECT * FROM table ORDER BY name ASC";
$result = $db->query($query);
$num = $result->num_rows;
for($i=0; $i < $num; $i++){
    $row = $result->fetch_object();
      //IF THIS IS THE FIRST TIME SEEING $row->name START 
      //WITH A DIFFERENT LETTER OF THE ALPHABET ECHO SOMETHING...
    echo $row->name;
 }

2 个答案:

答案 0 :(得分:2)

创建一个关联数组,记录您看过的字母。

$letters_seen = array();

while ($row = $result->fetch_object()) {
    $letter = substr($row->name, 0, 1);
    if (!isset($letters_seen[$letter])) {
        // This is the first time seeing this initial letter
        $letters_seen[$letter] = true;
        echo "<a id='$letter'>$letter</a>";
    }
    echo $row->name;
}

答案 1 :(得分:1)

由于您的结果是按名称排序的,如果当前行的第一个字母与上一行的第一个字母不匹配,那么您知道这是您第一次看到它。

$previousLetter = '';

for($i=0; $i < $num; $i++){
    $row = $result->fetch_object();        
    if($row->name[0] != $previousLetter) {
        echo "<a id='" . $row->name[0] . "'></a>";
        $previousLetter = $row->name[0];
    }    
    echo $row->name;
 }