[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться с массивом
strug
всем привет...помогите разобраться с массивом, соданного функцией 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;
}

usort($file_list'numsort');
print_r($file_list);






Спустя 7 часов, 48 минут, 59 секунд (28.08.2009 - 07:27) glock18 написал(а):
strcmp

Спустя 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);


тему можно закрывать
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.