Não sei se você está verificando erros, preparando ou escapando de suas consultas, mas faça isso.
Para gerar sua matriz, você pode fazer isso com isso:
$list = [];
$countries = $link->query("SELECT country_id, country_name FROM countries ...");
while ($country_row /*fetch from $countries*/) {
$country_id = $country_row['country_id'];
$country_info = [
'country_id' => $country_id,
'country_name' => $country_row['country_name'],
'country_cities' => []
];
$cities_stmt = "SELECT city_id, city_name FROM cities where $country_id...";
$cities = $link->query($cities_stmt);
while ($city_row /*fetch from $cities*/) {
$city_id = $city_row['city_id'];
$country_info['country_cities'][$city_id] = [
'city_id' => $city_id,
'city_name' => $city_row['city_name']
];
}
$list[$country_id] = $country_info;
}
Para exibir sua matriz, você pode fazer:
foreach ( $list as $country_id => $country_info ) {
echo "Country ID: $country_id<br />";
echo 'Country Name: ' . $country_info['country_name'] . '<br />';
echo 'Country Cities:<br />';
$cities = $country_info['country_cities'];
foreach ( $cities as $city_id => $city_info ) {
echo " City ID: $city_id<br />";
echo ' City Name: ' . $city_info['city_name'] . '<br />';
}
echo '<br />';
}
Além disso, se você souber o ID do país ou o ID da cidade, poderá fazer:
echo 'City Name: ' . $list[$country_id]['country_cities'][$city_id]['city_name'] . '<br />';