Как отсортировать массив PHP со значениями в виде строк, разделенных на '-' - PullRequest
0 голосов
/ 08 мая 2018

У меня есть следующий массив:

array (
  0 => '4-0',
  1 => '4-1',
  2 => '4-2',
  3 => '4-3',
  4 => '4-4',
  5 => '4-5',
  6 => '4-6',
  7 => '4-7',
  8 => '4-8',
  9 => '4-9',
  10 => '4-10',
  11 => '4-11',
  12 => '4-12',
  13 => '4-13',
  14 => '4-14',
  15 => '4-15',
  16 => '4-16',
  17 => '8-0',
  18 => '9-0',
  19 => '2-0',
  20 => '5-0',
  21 => '7-1',
)

То, что я хочу, это заказать ASC по value. Таким образом, значение в массиве [19] должно быть первым, а значение в массиве [18] последним. Я пробовал некоторые функции сортировки, такие как asort(), но он не делает то, что я точно хочу.

asort():

array (
  0 => '2-0',
  1 => '4-0',
  2 => '4-1',
  3 => '4-10',
  4 => '4-11',
  5 => '4-12',
  6 => '4-13',
  7 => '4-14',
  8 => '4-15',
  9 => '4-16',
  10 => '4-2',
  11 => '4-3',
  12 => '4-4',
  13 => '4-5',
  14 => '4-6',
  15 => '4-7',
  16 => '4-8',
  17 => '4-9',
  18 => '5-0',
  19 => '7-1',
  20 => '8-0',
  21 => '9-0',
)

Есть ли для этого специальная функция PHP или я должен реализовать свой собственный алгоритм? Есть идеи?

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Его простая, просто функция sort сделает всю работу.

sort($array);

Обратите внимание, что параметр передается по ссылке, а не по значению.

<?php
$array=array (
  0 => '4-0',
  1 => '4-1',
  2 => '4-2',
  ....
  ....
);
sort($array);
print_r($array);
?>

даст тот же ответ

0 голосов
/ 08 мая 2018

Вы можете использовать natsort http://php.net/manual/en/function.natsort.php. Будет отсортировано содержимое массива в виде строки.

natsort($your_array)
0 голосов
/ 08 мая 2018

Вы можете использовать sort() с флагом SORT_NATURAL для этого:

<?php
$array = array (
  0 => '4-0',
  1 => '4-1',
  2 => '4-2',
  3 => '4-3',
  4 => '4-4',
  5 => '4-5',
  6 => '4-6',
  7 => '4-7',
  8 => '4-8',
  9 => '4-9',
  10 => '4-10',
  11 => '4-11',
  12 => '4-12',
  13 => '4-13',
  14 => '4-14',
  15 => '4-15',
  16 => '4-16',
  17 => '8-0',
  18 => '9-0',
  19 => '2-0',
  20 => '5-0',
  21 => '7-1',
);

sort( $array, SORT_NATURAL );
print_r( $array );

Выход:

Array
(
    [0] => 2-0
    [1] => 4-0
    [2] => 4-1
    [3] => 4-2
    [4] => 4-3
    [5] => 4-4
    [6] => 4-5
    [7] => 4-6
    [8] => 4-7
    [9] => 4-8
    [10] => 4-9
    [11] => 4-10
    [12] => 4-11
    [13] => 4-12
    [14] => 4-13
    [15] => 4-14
    [16] => 4-15
    [17] => 4-16
    [18] => 5-0
    [19] => 7-1
    [20] => 8-0
    [21] => 9-0
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...