Вы можете использовать uksort()
, что позволяет настраиваемому обратному вызову взглянуть как на ключи, так и косвенно на связанные с ними значения. Тогда нужно просто решить, какие сравнения сделать, и вернуть соответствующее значение больше, чем меньше, чем ноль, чтобы повлиять на порядок сортировки.
Вот пример использования замыкания вокруг временной переменной (см. комментарий Джейкоба ), который, как мы надеемся, имеет смысл.
$temp = $arr;
uksort($arr, function ($a,$b) use ($temp) {
// Same values, sort by key ascending
if ($temp[$a] === $temp[$b]) {
return $a - $b;
}
// Different values, sort by value descending
return $temp[$b] - $temp[$a];
});
unset($temp);
print_r($arr);