2016-12-03 2 views
0

Я пытаюсь найти вхождения букв через некоторое время() .. но это не совсем работает для меня прямо сейчас. .. Это код я прямо сейчас:Проверьте и отобразите, сколько раз появляется письмо (A, B, C и т. Д.). 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++; 

} 

Это работает вроде, но когда дело доходит до последней буквы, он не показывает. Как сейчас, сейчас он колеблется от A-H, но он отображается только от A до F, а не от двух последних магазинов, начинающихся с «H». Я знаю, что вызывает его, но мой мозг не может обойти его прямо сейчас. Я считаю, что он вызван тем, что он использует $ first вместо $ current, так что это эхо - это раньше. Сообщите мне, если у вас есть идея, чтобы решить эту проблему .. спасибо

enter image description here

+0

Конечно, вы могли бы сделать этот расчет в SQL – RiggsFolly

+1

Вам просто нужно повторить эту строку (еще один раз) за пределами цикла 'while','

  • ' –

    +0

    Спасибо, друг. – Anders

    ответ

    1

    вы можете получить SQL, чтобы сделать всю работу за вас, если вы хотите

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