Печать дерева городов

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

$sql = 'SELECT country.id AS country_id,
    country.name AS country_name,
    city.id AS city_id,
    city.name AS city_name,
    area.name AS region_name,
    area.id as region_id
    FROM `pb_country` AS country
    LEFT JOIN `pb_area` AS area ON area.country=country.id
    LEFT JOIN `pb_city` AS city ON area.id=city.area
    WHERE country.id in ("UA","BY")  LIMIT 1000';
    // уберите последнюю строчку в предыдущем запросе для вывода всех городов во всех странах

// подключаемся к базе данных
$connection = mysql_connect( 'localhost', 'root', '' );
mysql_select_db( 'world', $connection );
mysql_set_charset( 'utf8' );

$query = mysql_query( $sql, $connection );

$data = []; // формируем массив
while ( $row = mysql_fetch_assoc( $query ) ) {
    $data[$row['country_id']][$row['country_name']][$row['region_name']][$row['city_id']] = $row['city_name'];
}

// начинаем выводить полученную структуру
$data = [];
if($query){
while ( $row = mysql_fetch_assoc( $query ) ) {
$data[$row['country_id']][$row['country_name']][$row['region_name']][$row['city_id']] = $row['city_name'];
}
echo '<ul>';
foreach ( $data as $country_id=>$country ) {
echo '<li>';
    foreach ( $country as $country_name => $region ) {
    echo '<b>'.$country_name.'</b><ul>';
        foreach ( $region as $region_name => $city ) {
        echo '<li>', $region_name, '<ul>';
                $max=10;
                foreach ( $city as $city_id=>$city_name ) {
                echo '<li><a href="/geo/country/'.$country_id.'/city/'.$city_id.'">'. $city_name. '</a></li>';
                if($max--<1){echo '<li> и другие...</li>';break;}
                }
                echo '</ul></li>';
        }
        echo '</ul></li>';
}
echo '</li>';
}
echo '</ul>';
}

Результат выполнения данного скрипта:

Базу данных можно взять здесь


.