$population = array(
'Украина' => array(
'Львов' => 100000,
'Киев' => 200000,
'Харьков' => 50000),
'Россия' => array(
'Орск' => 40000,
'Москва' => 300000,
'Новгород' => 20000),
'Германия' => array(
'Оберхаузен' => 25000,
'Дюсельдорф' => 70000,
'Гамбург' => 55000)
);
Нужно отсортировать его:
Во-первых: по ключах - названиях стран в порядке возрастания
Во-вторых: по ключах - названиях городов в порядке возрастания
С помощью этой пользовательской функции сортировки, я сортирую в алфавитном порядке названия стран:
function compare($x, $y)
{
if($x[0] == $y[0])
return 0;
elseif($x[0] > $y[0])
return 1;
else
return -1;
}
uksort($population, 'compare');
Что нужно туды добавить, чтоб сортировались так же имена городов? То есть как достучаться до литерального ключа вcтроенного массива? Кроме как $x[0]['Львов'] конечно.
$x[0][0] не прокатывает.
Спустя 7 минут, 11 секунд (24.11.2010 - 17:20) kovaldm написал(а):
ksort() + рекурсия тебе помогут.
Спустя 1 час, 21 минута, 55 секунд (24.11.2010 - 18:42) sixpoundeeer написал(а):
Цитата (kovaldm @ 24.11.2010 - 14:20) |
ksort() + рекурсия тебе помогут. |
Не получается
Спустя 5 минут, 50 секунд (24.11.2010 - 18:47) kovaldm написал(а):
Вот, в работе не проверял.
function my_ksort($arr)
{
ksort($arr);
foreach($arr as $v)
{
if(is_array($v)) my_ksort($v);
}
return $arr;
}
Спустя 1 час, 40 минут, 8 секунд (24.11.2010 - 20:27) sixpoundeeer написал(а):
Гм.. Почему-то ничего не возвращает. print_r($arr) выдет единицу.
Я вот так еще сделал:
Если print_r($result_array) использую в конце цикла for - отображает отсортированный массив, но если написать print_r после вызова функции compare - отображается единица.
Видимо я что-то не так делаю.
Я вот так еще сделал:
function compare($array)
{
$keys = array_keys($array);
for($i = 0; $i < count($array); $i++)
{
$key = $array[$keys[$i]];
ksort($key);
$result_array[$keys[$i]] = $key;
}
return $result_array;
}
Если print_r($result_array) использую в конце цикла for - отображает отсортированный массив, но если написать print_r после вызова функции compare - отображается единица.
Видимо я что-то не так делаю.
Спустя 31 минута, 39 секунд (24.11.2010 - 20:59) kovaldm написал(а):
Вот так надо:
function my_ksort($arr)
{
ksort($arr);
foreach($arr as $k=>$v)
{
if(is_array($v)) $arr[$k] = my_ksort($arr[$k]);
}
return $arr;
}
Спустя 39 минут, 33 секунды (24.11.2010 - 21:39) sixpoundeeer написал(а):
Опять не робит
Запускаю:
my_ksort($population);
Потом:
echo '<pre>';
echo print_r($population);
echo '</pre>';
Выводит начальный не отсортированный массив.
Запускаю:
my_ksort($population);
Потом:
echo '<pre>';
echo print_r($population);
echo '</pre>';
Выводит начальный не отсортированный массив.
Спустя 7 минут, 58 секунд (24.11.2010 - 21:47) kovaldm написал(а):
Вот как надо запускать.
$population = my_ksort($population);
print_r($population);
Спустя 1 час, 28 минут, 43 секунды (24.11.2010 - 23:15) sixpoundeeer написал(а):
Упс, точно. Все заработало, спасибо.
_____________
Как много веселых ребят. И все делают велосипед. А один из них как-нибудь утром. Придумает порох. (Виктор Цой)