powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Сортировка многомерного массива.
3 сообщений из 3, страница 1 из 1
(PHP) Сортировка многомерного массива.
    #33099476
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, подскажите плиз есть ли решение лучше для сортировки многомерных массивов (в данном случае)?

Задача состоит в следующем:
1. Требуется прочитать директорию. Затем вывести ее содержимое на экран.
2. Сделать сортировку содержимого по убыванию (возрастанию, но необязательно) по различным полям: Имя файла , Размер , Дата последнего изменения .
3. Сделать так, чтобы можно было сгруппировать директории и файлы, т.е. сначала "идут" директории, потом - файлы. Это как я понимаю вопрос к "множественной сортировки" (по нескольким полям), что и не знаю как делать. И вообще возможно ли такое сделать средствами PHP? В примерах мануала ничего подобного не уведил.

Пример, приведенный ниже умеет пока только сортировать по нескольким полям, но не умеет делать "множественную сортировку".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<?php
$dirs[] = array('file'=>'dirname1', 'is_dir'=> 1 , 'size'=> 0 , 'mtime'=> 1117087179 , 'mode'=>'');
$dirs[] = array('file'=>'arrow1.gif', 'is_dir'=> 0 , 'size'=> 84861 , 'mtime'=> 1117101118 , 'mode'=> 33206 );
$dirs[] = array('file'=>'x.jpg', 'is_dir'=> 0 , 'size'=> 12861 , 'mtime'=> 1117101119 , 'mode'=> 33206 );
$dirs[] = array('file'=>'arrow2.jpg', 'is_dir'=> 0 , 'size'=> 112861 , 'mtime'=> 1117101119 , 'mode'=> 33206 );
$dirs[] = array('file'=>'dirname2', 'is_dir'=> 1 , 'size'=> 0 , 'mtime'=> 1117087149 , 'mode'=>'');
$dirs[] = array('file'=>'z1.jpg', 'is_dir'=> 0 , 'size'=> 12861 , 'mtime'=> 1117101119 , 'mode'=> 33206 );

$content = print_r($dirs, true);
echo 'Before:<br>';
echo '<pre>';
echo $content;
echo '</pre>';
echo '<hr>';

$sorted = udfSort($dirs, 'file');

$content = print_r($dirs, true);
echo 'After sort by <b>\'file\'</b>:<br>';
echo '<pre>';
echo $content;
echo '</pre>';

// ------------------------------------------------------------------------
// ------------------------------------------------------------------------

// user defined function (sort ASC)
function udfSort(&$array, $index)
{
    $compare_func = create_function('$a, $b', 'return ($a[\''.$index.'\']==$b[\''.$index.'\'])? 0: (($a[\''.$index.'\']>$b[\''.$index.'\'])? 1: -1);');
    
    if (!function_exists($compare_func))
    {
        return false;
    }
    
    return usort($array, $compare_func);
}
?>
...
Рейтинг: 0 / 0
(PHP) Сортировка многомерного массива.
    #33099486
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результат выполнения (только часть вывода):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Before:

dirname1
arrow1.gif
x.jpg
arrow2.jpg
dirname2
z1.jpg

After sort by 'file':

arrow1.gif
arrow2.jpg
dirname1
dirname2
x.jpg
z1.jpg
Сталкивался ли кто с решением подобных задач?
...
Рейтинг: 0 / 0
(PHP) Сортировка многомерного массива.
    #33099705
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Ну добавь в функцию, чтобы вес директорий получался выше, и всё, делов то на пару условий.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Сортировка многомерного массива.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]