0

現在、次のコードを使用して、名前の開始文字でソートされたデータを取得しています。このコードを実行すると、作成しようとしているものが得られます

<?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'].",";

    }
    ?>
4

2 に答える 2

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 />';

}
于 2013-01-14T13:36:42.587 に答える
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>';
于 2013-01-14T13:31:26.307 に答える