У меня есть этот массив:
Array ( [0] => ../files/flv/1 [1] => ../files/flv/10 [2] => ../files/flv/2 [3] => ../files/flv/3 [4] => ../files/flv/4 [5] => ../files/flv/5 [6] => ../files/flv/6 [7] => ../files/flv/7 [8] => ../files/flv/8 [9] => ../files/flv/9 )
Мне нужно отсортировать это так:
Array ( [0] => ../files/flv/1 [1] => ../files/flv/2 [2] => ../files/flv/3 [3] => ../files/flv/4 [4] => ../files/flv/5 [5] => ../files/flv/6 [6] => ../files/flv/7 [7] => ../files/flv/8 [8] => ../files/flv/9 [9] => ../files/flv/10 )
Я пытался использовать sort($array,SORT_NUMERIC);
, но не повезло из-за этого префикса ../files/flv/
Я знаю только это решение: $array2 = array_map('basename', $array);
а потом sort($array2,SORT_NUMERIC);
Есть ли другие решения, не такие сложные?
использование SORT_NATURAL
вместо SORT_NUMERIC
(требуется PHP 5.4.0 или новее):
sort($array, SORT_NATURAL);
РЕДАКТИРОВАТЬ: Я использовал этот код для проверки:
$array = array(
'../files/flv/1',
'../files/flv/10',
'../files/flv/2'
);
sort($array, SORT_NATURAL);
print_r($array);
Это выводит:
Array
(
[0] => ../files/flv/1
[1] => ../files/flv/2
[2] => ../files/flv/10
)
РЕДАКТИРОВАТЬ 2: В качестве альтернативы вы можете использовать natsort()
функция работает и на старых версиях:
natsort($array);
Если путь «../files/flv/» всегда один и тот же, вы можете попробовать использовать функцию str_replace для всех элементов, а затем выполнить сортировку с использованием числовой сортировки, а затем добавить один и тот же путь ко всем элементам.
Итак, три шага:
Используйте цикл foreach над массивом и используйте функцию str_replace () для элемента ecah.
делайте сортировку, как вы делали, используя сортировку по номерам.
Используйте цикл foreach над массивом и поместите постоянный путь обратно в качестве префикса.
Чтобы сделать его более совершенным, вы можете сделать это, создав собственную функцию и передавая путь в качестве параметра.
Вы пробовали без SORT_NUMERIC
флаг?