У меня есть массив имен файлов, которые я использую с помощью DirectoryIterator. Я пытаюсь сортировать имена файлов, чтобы они были в порядке, так они появляются на сервере.
2DAYSALEGATE_PG1.jpg 2DAYSALEGATE_PG2.jpg 722_PG1.jpg PW_PG2_COKE_A.jpg PW_PG3_COKE_A.jpg PWBY4_DELI-1.jpg
Приобретая имена файлов, они выходят следующим образом. Я попытался использовать сортировку, natsort и natcasesort. Имя файла подчеркивается символом подчеркивания после букв. Что я могу сделать, чтобы подчеркнуть символ подчеркивания как символ приоритета.
array(6) { [0]=> string(20) "2DAYSALEGATE_PG1.jpg" [1]=> string(20) "2DAYSALEGATE_PG2.jpg" [2]=> string(11) "722_PG1.jpg" [5]=> string(16) "PWBY4_DELI-1.jpg" [3]=> string(17) "PW_PG2_COKE_A.jpg" [4]=> string(17) "PW_PG3_COKE_A.jpg" }
благодаря
Вы можете использовать метод php usort
, проверьте его здесь, используя usort
вы можете реализовать свой собственный метод compare to
функцией и отсортировать массив в соответствии с ним.
пользовательское compare to
функцией – это int callback ( mixed $a, mixed $b )
, вы должны вернуть значение меньше 0, если $a < $b
, ноль, если он равен, и значение больше 0, когда $a > $b
выполните свой предпочтительный порядок сортировки с использованием этого метода
пример:
function cmp($a, $b) { $aTemp = str_replace('_', '0', $a); $bTemp = str_replace('_', '0', $b); return strcmp($aTemp,$bTemp); } usort($arr, "cmp");
Не уверен, что вы можете здесь сделать. Лексически подчеркивание имеет более высокое значение ASCII, чем любой буквенно-цифровой символ.
Замена подчеркивания на низкое значение ASCII, например \ x01, а затем сортировка, а затем замена низкого значения ASCII на символ подчеркивания, даст результат, который вы хотите, но это кажется довольно дорогостоящим для тривиального изменения в порядке.
попробуйте использовать
for(i=0;i<array(6).length;i++){ if (array(6).charAt(0)=='_'){ for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; }}}}}