2013-01-14 118 views
0

目前我使用下面的代码获取的数据通过启动名字的字母排序,如果你运行这段代码,你会得到什么,我想创建如何在while循环中使用foreach?

<?php 


$dirs = array('Aname1','Aname2','Aname3','A Nmae','Bname ','Cname','Cardiff','Dname','Dname',); 
$cur_let = null; 
foreach ($dirs as $dir) { 
if ($cur_let !== strtoupper(substr($dir,0,1))){ 
$cur_let = strtoupper(substr($dir,0,1)); 
echo "<li class=\"title\">".$cur_let."</li>"; 
} 

echo "<li class=\"clear\"> 



<div class=\"name\">".$dir."</div> 
<div class=\"mobile\"></div> 
<div class=\"telephone\"></div> 
<div class=\"email\"></div> 
<div class=\"action\">edit | delete</div> 



<div class=\"clear\"></div> 


</li>"; 


} 

,但如何使用上述循环内以下获得瓦莱斯从数据库,它应该像(我想强调的第一个字母)http://i.stack.imgur.com/bLHVD.jpg

$query = "SELECT * FROM phone_number"; 

$result = mysql_query($query) or die(mysql_error()); 


while($row = mysql_fetch_array($result)){ 
    $names = $row['name'].","; 

    } 
    ?> 
+0

辍学PHP模式,而不是HTML的'echo'ing片段。 –

回答

1

随着库MySQLi:

$last_letter = null; 

$query = "SELECT name FROM phone_number ORDER BY name"; 
$sql = $mysqli->query($query); 
while($row = $sql->fetch_assoc()) { 
    $first_letter = substr(ucfirst($row['name']), 0, 1); 
    if($last_letter != $first_letter) { 
    $last_letter = $first_letter; 
    echo '<div class="letter">', $first_letter, '</div>'; 
    } 

    echo ucwords($row['name']), '<br />'; 

} 

随着mysql_*弃用功能:

$last_letter = null; 

$query = "SELECT name FROM phone_number ORDER BY name"; 
$sql = mysql_query($query); 
while($row = mysql_fetch_array($sql)) { 
    $first_letter = substr(ucfirst($row['name']), 0, 1); 
    if($last_letter != $first_letter) { 
    $last_letter = $first_letter; 
    echo '<div class="letter">', $first_letter, '</div>'; 
    } 

    echo ucwords($row['name']), '<br />'; 

} 
+0

未定义的变量: mysqli,致命错误:调用成员函数query()这两个错误显示 –

+0

这是因为我已经使用mysqli类与db进行交互。请注意,'mysql_ *'函数已被弃用,但我仍然编辑我的答案,以便为您的例子工作 –

+1

非常感谢它的神奇工作 –

0

尝试是这样的显示:

$query = "SELECT * FROM phone_number ORDER BY name DESC"; 
$result = mysql_query($query) or die(mysql_error()); 

$lastLetter = ''; 
$html = '<ul>'; 
while ($row = mysql_fetch_array($result)) { 
    $name = $row['name']; 
    if (strtoupper($name[0]) !== $lastLetter) { 
     if ($lastLetter !== '') 
      $html .= '</ul></li>'; 
     $lastLetter = strtoupper($name[0]); 
     $html .= '<li class="title">' . $lastLetter; 
     $html .= '<ul>'; 
    } 
    $html .= '<li>' . $name . '</li>'; 
} 
$html .= '</ul></li></ul>'; 
+0

是的,但结果应该是这样的http://i.stack.imgur.com/bLHVD.jpg我想突出第一个字母,然后数据库谷 –

+0

相应地改变...(至少我希望我) – 0xJoKe