2012-03-26 5 views
0

У меня есть массив, который выглядит следующим образом (пример):uksort несколько элементов массива

Array 
(
    [1600] => Array 
     (
      [country] => Canada 
      [memTypeID] => 10 
     ) 

    [1601] => Array 
     (
      [country] => United States 
      [memTypeID] => 7 
     ) 

    [1602] => Array 
     (
      [country] => Canada 
      [memTypeID] => 9 
     ) 
) 

Мне нужно отсортировать по стране, а затем memTypeID, сохраняя при этом ключе массива (в PHP). Я считаю, что мне нужно использовать uksort, поскольку usort перезаписывает ключи массива. Я знаю, как создать простую функцию сравнения для одного элемента массива, но я не понимаю, как я могу справиться с двумя.

Полученный массив должен быть:

Array 
(
    [1602] => Array 
     (
      [country] => Canada 
      [memTypeID] => 9 
     ) 
    [1600] => Array 
     (
      [country] => Canada 
      [memTypeID] => 10 
     ) 

    [1601] => Array 
     (
      [country] => United States 
      [memTypeID] => 7 
     ) 


) 

ответ

1
function cmp($a, $b) { 
    if(strcmp($a['country'],$b['country']) != 0) { 
     return $a['country'] > $b['country'] ? 1 : -1; 
    } 
    return $a['memTypeID'] > $b['memTypeID'] ? 1 : -1; 
} 

uasort($a, "cmp"); 
+0

Это правильно сортирует с usort, но не сохраняет ключи массива. Если я поменяю uksort на usort, сортировка будет потеряна. – lcdservices

+0

исправлено, проверьте еще раз, используйте с 'uasort' – safarov

+0

спасибо - отлично поработал – lcdservices