Сортировка массива PHP с использованием значений подклюка

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

 массив
 (
     [Erik] => Массив
     ( 
         [count] => 10
         [изменения] => 1
     )
     [Мортен] => Массив
     (
         [count] => 8
         [изменения] => 1
     )
 )

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

Для этого вы должны использовать uasort .

bool uasort (массив и $ массив, обратный вызов $ cmp_function)

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

Попробуйте использовать 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 ) ) 

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

Используйте this.i тонкий он работает

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

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

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

Это сортирует массив, используя array_sum() и поддерживая ключи.