Как перечислить элементы в алфавитном порядке с заголовком, и если совпадение не найдено, отобразите сообщение

Мой план действий:

  1. Цикл через массив алфавита
  2. Внутри этого цикла напечатайте текущую букву
  3. Внутри этого цикла цикл через список городских объектов, хранящихся в массиве.
  4. Проверьте и проверьте, соответствует ли первая буква свойства $city-> city_name текущей букве в цикле. Если он соответствует, распечатайте его.
  5. Если совпадений нет, напечатайте сообщение об этом.

Это все, что я могу показать:

Нет результатов для отображения.

В

Нет результатов для отображения.

С

город

Нет результатов для отображения.

D

Нет результатов для отображения.

Е

город

Нет результатов для отображения.

Как вы можете видеть, ошибка отображается, даже если есть совпадение. Я не могу понять, где ошибка в моей логике, и я просматривал каждый вопрос по этой теме. Есть ли что-то очевидное, что мне не хватает?

Код:

<!--?php
function printValues($cities, $county) 
{
 $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $letters = str_split($str);
 $lettersMatched = FALSE;

 foreach ($letters as $letter) 
 {
 echo "<h5 class=\"letter\"-->".$letter."";

 foreach ($cities as $city) 
 {
 if(substr($city->city_name, 0, 1) == $letter) 
 {
 $lettersMatched = TRUE;
 $result = $city->city_name;
 echo "<p><a href="\" ".site_url("="" listings="" county="" ".$county."="" city="" ".$result)."\""="" target="_blank">".$result."</a></p>";
 $lettersMatched = FALSE;
 }
 } 
 if (!$lettersMatched) 
 {
 echo "<p>There are no results to display.</p>";
 }
 }
}
?>
2 ответа

Вы возвращаете $ lettersMatched в false внутри оператора if. Попробуй это:

<!--?php
function printValues($cities, $county) 
{
 $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $letters = str_split($str);
 //$lettersMatched = FALSE;

 foreach ($letters as $letter) 
 {
 echo "<h5 class=\"letter\"-->".$letter."";
 $lettersMatched = FALSE;

 foreach ($cities as $city) 
 {
 if(substr($city->city_name, 0, 1) == $letter) 
 {
 $lettersMatched = TRUE;
 $result = $city->city_name;
 echo "<p><a href="\" ".site_url("="" listings="" county="" ".$county."="" city="" ".$result)."\""="" target="_blank">".$result."</a></p>";
 // $lettersMatched = FALSE;
 }
 } 
 if (!$lettersMatched) 
 {
 echo "<p>There are no results to display.</p>";
 }
 }
}
?>


$matches = false;
foreach(range('A', 'Z') AS $letter)
{
 echo $letter . '';

 foreach( $cities AS $city )
 {
 if( strtoupper(substr($city->city_name, 0, 1)) === $letter)
 {
 $matches = true;
 echo "<p>" . $city->city_name . "</p>";
 }
 }

 if(!$matches)
 echo "<p>No matches here</p>";

 $matches = false;

}

То, что вы сделали, - установить совпадения в false сразу после того, как вы установите значение true во внутреннем цикле. Поэтому, когда ваш код достигнет условия вне цикла, он всегда будет false.

То, что я сделал, это установить совпадения в false после условия, поэтому он будет проверяться снова для каждой новой буквы.

licensed under cc by-sa 3.0 with attribution.