php: массив сортировка по строковому ключу - PullRequest
5 голосов
/ 04 апреля 2011

Как мне отсортировать массив по ключам, от меньшего разрешения к большему:

$sizes = array(
   '120x120' => 'large',
   '60x60' => 'small',
   '200x200' => 'very large',
   '90x90' => 'medium',
...

?

должно быть:

  • 60x60
  • 90x90
  • 120x120
  • 200x200
  • ...

Ответы [ 5 ]

8 голосов
/ 04 апреля 2011

вам нужна естественная сортировка по ключам, можете использовать uksort

uksort($array, 'strnatcasecmp');
8 голосов
/ 04 апреля 2011

ksort() в числовом режиме должно работать нормально:

$sizes = array(
   '120x120' => 'large',
   '60x60' => 'small',
   '200x200' => 'very large',
   '90x90' => 'medium',
);

ksort($sizes, SORT_NUMERIC);
var_dump($sizes);

получит вас:

array
  '60x60' => string 'small' (length=5)
  '90x90' => string 'medium' (length=6)
  '120x120' => string 'large' (length=5)
  '200x200' => string 'very large' (length=10)


Это будет работать, потому что размер является числовым - и находится до 'x' (не уверен, что будет сделано с 'x' и что последует - но, в любом случае, эта часть клавиш бесполезна , так как это чисто избыточная информация)

2 голосов
/ 04 апреля 2011
$sizes = array(
   '120x120' => 'large',
   '60x60' => 'small',
   '200x200' => 'very large',
   '90x90' => 'medium');
uksort($sizes, 'userSorting');
print_r($sizes);
function userSorting($a, $b) {
    $a = explode('x', $a);
    $b = explode('x', $b);
    return $a[0] > $b[0];
}
2 голосов
/ 04 апреля 2011

Попробуйте с ksort () .

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

Редактировать: чтобы завершить ответ, используйте флаг SORT_NUMERIC.

0 голосов
/ 04 апреля 2011

Если взглянуть на справочную страницу PHP Sorting Arrays , вы увидите, что есть несколько вариантов сортировки массива по его ключам, из которых ksort (с использованием SORT_NUMERIC модификатор), скорее всего, тот, который вам нужен.

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