Сортировка массива PHP по значениям подключа - PullRequest
4 голосов
/ 04 июля 2011

У меня есть массив, который выглядит примерно так:

Array
(
    [Erik] => Array
    ( 
        [count] => 10
        [changes] => 1
    )
    [Morten] => Array
    (
        [count] => 8
        [changes] => 1
    )
)

Теперь ключи в массиве - это имена техников нашей справочной системы. Я пытаюсь отсортировать это по количеству [count] плюс [changes] и затем показать их. Я пытался использовать usort , но затем ключи массива заменяются номерами индексов. Как я могу отсортировать это и сохранить ключи массива?

Ответы [ 5 ]

7 голосов
/ 04 июля 2011

Попробуйте использовать uasort ():

<?
function cmp($a, $b)
{
   return ($b['count'] + $b['changes']) - ($a['count'] + $a['changes']);
}

$arr = array(
   'John' => array('count' => 10, 'changes' => 1),
   'Martin' => array('count' => 5, 'changes' => 5),
   'Bob' => array('count' => 15, 'changes' => 5),
);

uasort($arr, "cmp");

print_r($arr);
?>

печать:

Array
(
   [Bob] => Array
   (
      [count] => 15
      [changes] => 5
   )
   [John] => Array
   (
      [count] => 10
      [changes] => 1
   )
   [Martin] => Array
   (
      [count] => 5
      [changes] => 5
   )
)
6 голосов
/ 04 июля 2011

Для этого следует использовать uasort.

bool uasort (array & $ array, callback $ cmp_function)

Эта функция сортирует массив так, что индексы массива сохраняют своикорреляция с элементами массива, с которыми они связаны, используя определяемую пользователем функцию сравнения.Это используется в основном при сортировке ассоциативных массивов, где фактический порядок элементов является значимым.

0 голосов
/ 04 июля 2011

Используйте это. Тонко это работает

function cmp($a, $b)
    {
        if ($a['count'] == $b['count']) {
            return 0;
        }
        return ($a['count'] > $b['count']) ? +1 : -1;
}

usort ( $array, 'cmp' );
0 голосов
/ 04 июля 2011

Это должно сделать то, что вам нужно:

uasort($array, create_function('$a, $b', 'return (array_sum($a) - array_sum($b));'));

Сортировка массива с использованием функции array_sum() и сохранение ключей.

0 голосов
/ 04 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...