2014-09-04 71 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; 
} 
相關問題