[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка многомерных массивов
sixpoundeeer
Есть массив:
$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() + рекурсия тебе помогут.

Не получается sad.gif

Спустя 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) выдет единицу.
Я вот так еще сделал:


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 написал(а):
Опять не робит smile.gif
Запускаю:
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 написал(а):
Упс, точно. Все заработало, спасибо.


_____________
Как много веселых ребят. И все делают велосипед. А один из них как-нибудь утром. Придумает порох. (Виктор Цой)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.