Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите разобраться с массивом


Автор: strug 27.8.2009, 18:05
привет всем...помогите разобраться с массивом, получаемого функцией scandir()

Код

<?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;
        } 
natsort($file_list);
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 
)

а нужно, чтобы было 
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 
)

т.е. не правильно сортируются значения в массиве...перепробывал все : sort(), usort(), natcasesort() и т.д. 

может вы подскажите в чем проблема?
спасибо...

Автор: IZ@TOP 27.8.2009, 18:41
Посмотрите в сторону http://ru2.php.net/manual/en/function.usort.php

Для примера:
Код


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($dirs, 'numsort');
print_r($dirs);

Что бы сортировка была еще и по алфавиту, первой букве в имени - доработайте функцию.

Автор: Ипатьев 27.8.2009, 19:09
Цитата(strug @  27.8.2009,  18:05 Найти цитируемый пост)
может вы подскажите в чем проблема?

в том, что не сформулирована задача. а точнее - алгоритм.
плюс, поленились познакомиться с описанием функций в документации.
в которой написано, например, что natsort специально придумана для того, чтобы сортировать "неправильно".

непонятно, кстати, чем не устроила натуральная сортировка.

Автор: Den1s 27.8.2009, 19:17
все правильно отсортировано....отсортируйте в любых приложениях и Z-003.jpg  будет везде после Z-0010v.jpg , т.к. Z-003.jpg в вашем случае эквивалентно Z-0030.jpg.

Вывод: пишите свой алгоритм сортировки, либо же меняйте название файлов чтобы имя у всех было одинаковой длины например так


[0] => L-002.jpg 
[1] => L-063a.jpg 
[2] => Z-00001.jpg 
[3] => Z-00003.jpg 
[4] => Z-00010.jpg 
[5] => Z-0010v.jpg 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)