Например вот так
<?php
$rows = array(
array(
'country_id' => 1,
'country_name' => 'Country1',
'city_id' => 1,
'city_name' => 'City1'
),
array(
'country_id' => 1,
'country_name' => 'Country1',
'city_id' => 2,
'city_name' => 'City11'
),
array(
'country_id' => 2,
'country_name' => 'Country2',
'city_id' => 2,
'city_name' => 'City2'
),
array(
'country_id' => 3,
'country_name' => 'Country3',
'city_id' => 3,
'city_name' => 'City3'
),
);
$result = array();
$prevId = -1;
foreach($rows as $row) {
if ($row['country_id'] != $prevId) {
$result[] = array(
'country_id' => $row['country_id'],
'country' => $row['country_name'],
'cities' => array_filter($rows, function($val) use ($row) {
return $row['country_id'] == $val['country_id'];
})
);
}
$prevId = $row['country_id'];
}
var_dump($result);