PHP, объединяющий arsort & ksort - PullRequest
2 голосов
/ 28 ноября 2011

Я пытаюсь отсортировать массив по значению по убыванию, сохраняя ключи (arsort), но если значения равны, я хочу, чтобы он также сортировался в порядке возрастания ключей (ksort).

Я пытался это:

ksort($array);
arsort($array);

Но ksort не сохраняется, и ключи снова перемешиваются после arsort.

например. если мой входной массив в:

$array[0] = 4;
$array[1] = 2;
$array[2] = 3;
$array[3] = 1;
$array[4] = 4;

Я хочу отсортировать его так, чтобы он заканчивался так:

$array[0] = 4;
$array[4] = 4;
$array[2] = 3;
$array[1] = 2;
$array[3] = 1;

НЕ так:

$array[4] = 4;
$array[0] = 4;
$array[2] = 3;
$array[1] = 2;
$array[3] = 1;

Но предыдущий порядок клавиш, похоже, нарушен arsort.

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

PHP отбросил стабильную сортировку (которая гарантировала нужный вам порядок) в PHP 4.1: https://bugs.php.net/bug.php?id=53341&edit=1

Вот, казалось бы, дурацкий вопрос с фрагментом кода, чтобы обойти его (в основном: написать свою собственную сортировкуfunction. Boo.): Сохранять порядок ключей (стабильная сортировка) при сортировке с помощью uasort PHP

0 голосов
/ 28 ноября 2011

Жаль, поскольку он не поддерживается, вот функция, которую я написал для него:

function arksort($array)
    {
    arsort($array);
    $newarray=array();
    $temp=array();
    $on=current($array);
    foreach($array as $key => $val)
        {
        if ($val===$on) $temp[$key]=$val;
        else
            {
            ksort($temp);
            $newarray=$newarray+$temp;
            $temp=array();
            $on=$val;
            $temp[$key]=$val;
            }
        }
    ksort($temp);
    $newarray=$newarray+$temp;
    reset($newarray);
    return $newarray;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...