Php сортировка массива по возрастанию

У меня есть этот массив:

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);

Есть ли другие решения, не такие сложные?

0

Решение

использование 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);
3

Другие решения

Если путь «../files/flv/» всегда один и тот же, вы можете попробовать использовать функцию str_replace для всех элементов, а затем выполнить сортировку с использованием числовой сортировки, а затем добавить один и тот же путь ко всем элементам.

Итак, три шага:

  1. Используйте цикл foreach над массивом и используйте функцию str_replace () для элемента ecah.

  2. делайте сортировку, как вы делали, используя сортировку по номерам.

  3. Используйте цикл foreach над массивом и поместите постоянный путь обратно в качестве префикса.

Чтобы сделать его более совершенным, вы можете сделать это, создав собственную функцию и передавая путь в качестве параметра.

0

Вы пробовали без SORT_NUMERIC флаг?

-1
По вопросам рекламы [email protected]