Как сортировать список городов по первой букве и по блокам А, Б, В и т.д?
Массив всё таки сначала отсортировать, а потом уж выводить.
Ну что-то вроде того.$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]