всем привет...помогите разобраться с массивом, соданного функцией scandir()
скрапт должен сортировать названия файлов следующим образом
Array (
[0] => L-002.jpg
[1] => L-063a.jpg
[2] => Z-001.jpg
[3] => Z-003.jpg
[4] => Z-0010.jpg
[5] => Z-0010v.jpg
)
т.е. групировка по первой букве+сортировка значений после "-" по возростанию...стандартными функциями добится желаемого результата не смог, поэтому написал функцию numsort, которая в сочетании с usort() дает следующий результат (сам код ниже)...да и названия менять нельзя(
Array (
[0] => Z-001.jpg
[1] => L-002.jpg
[2] => Z-003.jpg
[3] => Z-0010v.jpg
[4] => Z-0010.jpg
[5] => L-063a.jpg
)
т.е. смог добится только сортировки после "-"
ПОМОГИТЕ ДОРАБОТАТЬ СКРИПТ - ОЧЕНЬ НАДО !!!!
ВСЕМ ЗАРАНЕЕ СПАСИБО
PHP |
<?php $list = scandir("modules/images/all/97/"); $file_list = array(); foreach ($list as $txt){ $fn=strrchr($txt,'.'); $fn=strtolower($fn); if ($fn!=='.jpg') continue; $file_list[] = $txt; }
function numsort($a, $b) { if((int) substr($a,strpos($a,'-')+1) == (int) substr($b,strpos($b,'-')+1)) { return 0; }
return (int) substr($a,strpos($a,'-')+1) > (int) substr($b,strpos($b,'-')+1) ? 1 : -1; }
usort($file_list, 'numsort'); print_r($file_list);
|
Спустя 7 часов, 48 минут, 59 секунд (28.08.2009 - 07:27) glock18 написал(а):
Спустя 3 часа, 5 минут, 25 секунд (28.08.2009 - 10:32) strug написал(а):
glock18
если я правильно понял, то юзать нужно вот так
PHP |
<?php $list = scandir("modules/images/all/97/"); $file_list = array(); foreach ($list as $txt){ $fn=strrchr($txt,'.'); $fn=strtolower($fn); if ($fn!=='.jpg') continue; $file_list[] = $txt; }
usort($file_list, 'strcmp'); print_r($file_list);
|
только так я уже пробывал - выдает
Array (
[0] => L-002.jpg
[1] => L-063a.jpg
[2] => Z-001.jpg
[3] => Z-0010.jpg
[4] => Z-0010v.jpg
[5] => Z-003.jpg
)
такой вариант меня не устраивает
Спустя 6 минут, 51 секунда (28.08.2009 - 10:39) glock18 написал(а):
strcmp + numsort. сначала сортируем по буквам перед "-". а потом по числам после.
сортировку чуток дописать надо просто.
PHP |
if ($compare = strcmp($item1, $item2) == 0) { $compare = numsort... } return $compare; |
что-то в этом духе.
Спустя 1 час, 25 минут, 27 секунд (28.08.2009 - 12:05) strug написал(а):
Вот разобрался, может кому пригодится...правда громоздко, но работает)
PHP |
<?php $list = scandir("modules/images/all/97/"); $file_list = array(); foreach ($list as $txt){ $fn=strrchr($txt,'.'); $fn=strtolower($fn); if ($fn!=='.jpg') continue; $a[] = $txt; }
function cmp($a,$b) { $first=strncmp($a,$b,1); // Сравниваем первую букву if ($first) // Если разные, то возвращаем значение return $first; $a=substr($a,2); // Убираем первую букву и тире $b=substr($b,2); $a=substr($a,0,strrpos($a,'.')); // Убираем расширение файла $b=substr($b,0,strrpos($b,'.')); $a=str_pad($a,10,'0',STR_PAD_LEFT); // Слева дополняем нулями до 10 символов $b=str_pad($b,10,'0',STR_PAD_LEFT); return strcmp($a,$b); // И сравниваем } usort($a,'cmp'); print_r($a);
|
тему можно закрывать