@nikkon82

Как сортировать список городов по первой букве и по блокам А, Б, В и т.д?

Добрый день!

Есть список городов, который выводится из массива и сортируется по первой букве алфавита.

Как сделать, чтобы выводилось не просто списком, а разбивалось на блоки по первой букве - А, Б, В и т.п.

Вот код вывода массива:
<div>
        {% for city in cities %}
            <div class="cities_city">
                  <a class="cities_city-name" data-id="{{ city.fias_id }}">
                    {{ city.name }}
                  </a>
                </div>
              {% endfor %}
            </div>
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 3
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
Массив всё таки сначала отсортировать, а потом уж выводить.
Ответ написан
BojackHorseman
@BojackHorseman
...в творческом отпуске...
запоминать предыдущую первую букву. если изменилась, то рисовать новый блок
Ответ написан
@kikimarik
Ну что-то вроде того.
$cities = ['Moscow', 'London', 'NY', 'LA'];
sort($cities);
$citiesByLetters = [];

foreach ($cities as $city) {
                
    $citiesByLetters[$city[0]][] = $city;
}

foreach ($citiesByLetters as $letter => $cities) {
                
    echo '<div id="letter-'.$letter.'">';

    foreach ($cities as $city) {
                    
        echo '<div class="city-el">'.$city.'</div>';
    }

    echo '</div>';
}

Если имена городов в utf-8, то используйте mb_substr($city, 0, 1, 'UTF-8') для определения первой буквы города вместо $city[0]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы