Двойная сортировка

Paxan

Новичёк
Двойная сортировка

Есть массив вида:
PHP:
Array
(
    [20] => Array
        (
            [key] => 1
        )
    [10] => Array
        (
            [key] => 3
        )
    [17] => Array
        (
            [key] => 1
        )

)
1. Надо отсортировать по значению key (с этим проблем нет). Т.е. привести к виду:
PHP:
Array
(
    [20] => Array
        (
            [key] => 1
        )
    [17] => Array
        (
            [key] => 1
        )
    [10] => Array
        (
            [key] => 3
        )
)
2. Теперь надо отсортировать по номерам, там где key совпадает. Т.е. привести к виду:
PHP:
Array
(
    [17] => Array
        (
            [key] => 1
        )
    [20] => Array
        (
            [key] => 1
        )
    [10] => Array
        (
            [key] => 3
        )
)
И вот тут не могу придумать нормального решения =( Только всякий изврат. Толкните плз в правильном направлении.
 

Paxan

Новичёк
PROman
Разбиение массива на несколько массивов по key, сортировка каждого отдельно и обратное склеивание в один.
 

Paxan

Новичёк
sakon
И как с помощью этих двух функций я смогу сделать двойную сортировку? Хотя бы первую по key?

PROman
При помощи usort я отсортирую только по key и при этом потеряю индексы (20,17,10). Тут надо ипользоать uasort, для сортировки по key. А как быть со второй сортировкой по индексу?
 

sakon

П..и.н..ок
Paxan
$array = ksort($array);
$array = asort($array);
Сорри не врубился, что тебе надо обратную сортировку сделать.
krsort
Блин. Сам себе мозги заморочил. Конечно ksort()
 

Paxan

Новичёк
sakon
Хмм.. пытался ужать задачу. Но видимо зря. Там кроме key могут быть еще значения. Пример:
PHP:
$array = array(
	20 => array(
		"a"   => 0,
		"key" => 3
	),
	10 => array(
		"a"   => 1,
		"key" => 1		
	),
	17 => array(
		"a"   => 10,
		"key" => 3		
	),
	5 => array(
		"a"   => 15,
		"key" => 2		
	),
);
PS: функции *sort возвращают bool
 

Paxan

Новичёк
По key сортирую так:
PHP:
function cmp($a, $b) 
{
    if ($a["key"] == $b["key"]) {
        return 0;
    }
    return ($a["key"] < $b["key"]) ? -1 : 1;
}

uasort($array,"cmp");
-~{}~ 19.10.05 21:01:

sakon
Фукнцию смотрел и раньше. Я наверное чего-то не понимаю в этой жизни, но никак не могу понять как использовать array_multisort для моего случая.
 

sakon

П..и.н..ок
Никак.
Для меня "кеу" обычно в массиве обозначает несколько другое. Поэтому и не врубился.
 
Сверху