2016-12-03 2 views
0

J'essaie de trouver les occurrences de lettres dans un moment() .. mais ça ne fonctionne pas tout à fait pour moi en ce moment. .. Ceci est le code que j'ai en ce moment:Vérifiez et affichez combien de fois une lettre apparaît (A, B, C etc ..) PHP

$sql = "SELECT name FROM shops ORDER BY name ASC"; 
$result = mysqli_query($conn,$sql); 

// Previous or first letter 
$first = ""; 
// Current letter 
$current = ""; 
$c_instances = 0; 
while($obj = mysqli_fetch_object($result)){ 

    $current = strtoupper(substr($obj->name,0,1)); 

    if(empty($first)){ 
     $first = strtoupper(substr($obj->name,0,1)); 
    } 

    if($current != $first){ 
     ?> 
      <a href=""><li><?=$first;?> <span><?=$c_instances;?></span></li></a> 
     <? 
     $first = strtoupper(substr($obj->name,0,1)); 
     $c_instances = 0; 
    } 
    $c_instances++; 

} 

Cela ne fonctionne en quelque sorte, mais quand il vient à la dernière lettre, il ne le montre pas. Comme c'est maintenant en ce moment, il va de A à H, mais il ne montre que de A à F, pas les deux dernières boutiques commençant par "H". Je sais en quelque sorte ce qui le cause, mais mon cerveau ne peut pas le contourner en ce moment .. Je crois que c'est causé parce qu'il utilise $ first au lieu de $ current, donc ça fait écho à celui d'avant. vous avez une idée pour résoudre ce .. merci

enter image description here

+0

Certes, vous pouvez faire ce calcul dans le SQL – RiggsFolly

+1

Vous avez juste à répéter cette ligne (une fois de plus) en dehors de votre boucle while, '

  • ' –

    +0

    Merci mon pote. – Anders

    Répondre

    1

    vous pouvez obtenir le SQL pour faire tout le travail pour vous si vous vouliez

    SELECT SUBSTRING(name,1,1) as First, count(name) 
    from shops 
    GROUP BY First 
    ORDER BY First;