Preethu Alex
Preethu Alex

Reputation: 57

how to use foreach inside while loop?

Currently I am using following code to get data sorted by starting letter of name, if you run this code you will get what i am trying to create

<?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>";


} 

but how to use above loop inside following to get vales from database and it should be display like (I want highlight first letter) https://i.sstatic.net/bLHVD.jpg

$query = "SELECT * FROM phone_number"; 

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


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

    }
    ?>

Upvotes: 0

Views: 2183

Answers (2)

Mihai Matei
Mihai Matei

Reputation: 24276

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

}

With mysql_* deprecated functions:

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

}

Upvotes: 1

0xJoKe
0xJoKe

Reputation: 853

Try something like this:

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

Upvotes: 0

Related Questions