Вы хотите естественным образом отсортировать значения массива 1, 2, 10, 20
, чтобы они не сортировались как числовая строка 1, 10, 2, 20
.Результаты должны быть одинаковыми в PHP 5 и PHP 7.
Вы можете использовать array_multisort
с флагами SORT_ASC
и SORT_NATURAL
вместе с array_column
дляполучить значения для сортировки.
PHP 5,5 +
array_multisort(array_column($ar, 'number'), SORT_ASC, SORT_NATURAL, $ar);
var_export($ar);
В качестве альтернативы вы можете использовать strnatcmp
с usort
.
PHP 5.3 +
usort($ar, function($a, $b) {
return strnatcmp($a['number'], $b['number']);
});
var_export($ar);
Результат
array (
0 =>
array (
'number' => '102-1',
),
1 =>
array (
'number' => '102-2',
),
2 =>
array (
'number' => '102-11',
),
3 =>
array (
'number' => '105-1',
),
4 =>
array (
'number' => '203-1',
),
5 =>
array (
'number' => '302-1',
),
6 =>
array (
'number' => '302-2',
),
7 =>
array (
'number' => '419-1',
),
8 =>
array (
'number' => '508-1',
),
)