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

If I query a database with PHP using MySQLi, how can I detect the first instance of each letter of the alphabet?

If I have a table like -

ID | name
1    Allen
2    John
3    Sally
4    William

and I query

SELECT * FROM table ORDER BY name ASC

Can I have something in my loop that says "if this is the first time you've seen the string in name start with the letter A", echo <a id="a"></a> to create an anchor tag? Then it will proceed to do the same for B,C,D,E,F,G, etc.. Then I can create an alphabetical legend.

Here is my query and loop:

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

Create an associative array that records which letters you've seen.

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

Since your results are ordered by name, if the first letter of the current row doesn't match the first letter of the previous row, then you know it's the first time you've seen it.

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