Рассмотрим следующий ассоциативный массив
$arr = Array
(
[banana] => 2
[cherry] => 1
[orange] => 3
[grapefruit] => 1
[apple] => 1
)
Я хочу отсортировать его таким образом, чтобы он был похож на терм PLSQL: A DESC, B ASC
(где A — значение, а B — ключ) значение:
$arr = Array
(
[orange] => 3
[banana] => 2
[apple] => 1
[cherry] => 1
[grapefruit] => 1
)
так что апельсин и банан идут первыми из-за ЦЕННОСТИ, но затем у меня есть яблоко, вишня и грейпфрут в алфавитном порядке, потому что они имеют одно и то же ЦЕННОСТЬ.
Что я пробовал:
1. запустить ksort(), а затем asort()/ rsort(), надеясь, что вторая сортировка будет поднимите апельсин и банан в начало массива, не нарушая алфавитный порядок остальных 3 элементов. Я был неправ. это все портит. Итак, я проверил:
2. функции сортировкии array_multisort(). Но судя по всему он сортирует сразу несколько массивов, или многомерный массив.
3. Я также попытался определить следующую функцию сравнения:
function cmp($a, $b)
{
foreach ($a as $key1 => $val1) {
foreach ($b as $key2 => $val2) {
if($val1 == $val2){
return strcmp($key1,$key2);
}
else if ($val1 > $val2){
return 1;
}
else{ // $val1 < $val2
return -1;
}
}
}
}
и вызвать ее с помощью usort(), но это тоже не сработало.
Итак, мой вопрос: существует ли метод PHP, реализующий запрошенное поведение?
От Евгения:
Пробовал, не работает
до сортировки:
Array
(
[lamb] => 3
[rule] => 1
[children] => 1
[teacher] => 2
[eager] => 1
)
и после сортировки:
Array
(
[children] => 1
[eager] => 1
[rule] => 1
[teacher] => 2
[lamb] => 3
)