我正在制作一个联系人应用程序(使用CodeIgniter和jQuery Mobile),我正在尝试为每组名称插入列表分隔符。
示例:
A
Adam Smith
Alex Smith
B
Beth Smith
Billy Smith
到目前为止,我可以从mysql db:http://dl.dropbox.com/u/19118763/screenshots/before.png
按字母顺序获取名称代码
<?php
$query = $this->db->query("SELECT * FROM `CONTACTS` ORDER BY `CONTACTS`.`FIRST` ASC LIMIT 0, 100");
foreach($query->result() as $row):
?>
<li><a href="contacts/details/<?=$row->ID?>/index.php" data-rel="dialog" data-transition="slidedown"><?=$row->FIRST?> <?=$row->LAST?></a></li>
<?php endforeach; ?>
但是,一旦我添加以下代码来获取每个名字的第一个字母,我得到以下结果:http://dl.dropbox.com/u/19118763/screenshots/after.png
上面的相同代码除了在foreach中添加了这个
<li data-role='list-divider'><?php echo substr("$row->FIRST",0,1); ?></li>
答案 0 :(得分:0)
尝试替换与此链接的代码:
<?php
$prevletter = null;
$query = $this->db->query("SELECT * FROM `CONTACTS` ORDER BY `CONTACTS`.`FIRST` ASC LIMIT 0, 100"); foreach($query->result() as $row):
$letter = substr($row->FIRST, 0, 1);
if ($letter != $prevletter):
$prevletter = $letter;
?>
<li data-role='list-divider'><?=$letter?></li>
<?php endif; ?>
<li><a href="contacts/details/<?=$row->ID?>/index.php" data-rel="dialog" data-transition="slidedown"><?=$row->FIRST?> <?=$row->LAST?></a></li>
<?php endforeach; ?>
那应该做你需要的。
答案 1 :(得分:0)
您需要检查先前是否已输出“第一个字母”,并且只在更改时输出一个字母:
$previous_letter = null; // prime things with an "impossible" letter.
while(...) {
if ($previous_letter != substr($row->FIRST, 0, 1)) {
... ouptut new letter ...
$previous_letter = new letter...
}
}
答案 2 :(得分:0)
那是因为你遇到的每一行都是在回应第一个字母。如果第一个字母与最后一个字母不同,您只想回显第一个字母。
伪代码:
$prev = null
foreach (rows as row){
$curr = substr(row->first, 0, 1)
if ($prev != $curr){
echo list-divider
$prev = $curr;
}
}