2014-09-04 111 views
0

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

如果我有这样一个表 -

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

创建关联数组的记录,你见过哪个字母。

$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

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

$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; 
} 
相关问题