Упорядочить этот массив по дате изменения?

У меня есть файл php, который создает массив всего в моем каталоге пользователей, затем массив отправляется обратно на iPhone.

Массив, который создает мой php, упорядочивает их в алфавитном порядке, я хочу, чтобы он сортировался по дате создания файла.

Вот как выглядит мой файл php

<?php
$username = $_GET['username'];
$path = "$username/default/";


$files = glob("{$path}/{*.jpg,*.jpeg,*.png}", GLOB_BRACE);

// output to json
echo json_encode($files);

?>

Как бы я это сделал?

Спасибо :)


person Jacob    schedule 30.10.2011    source источник


Ответы (2)


Использование usort() с обратным вызовом, который вызывает filemtime()...

Это не проверено, но я верю, что это направит вас на правильный путь...

// First define a comparison function to be used as a callback
function filetime_callback($a, $b)
{
  if (filemtime($a) === filemtime($b)) return 0;
  return filemtime($a) < filemtime($b) ? -1 : 1; 
}

// Then sort with usort()
usort($files, "filetime_callback");

Это должно отсортировать их по старшинству. Если вы хотите, чтобы они шли первыми, измените < на > в тройной операции обратного вызова return.

person Michael Berkowski    schedule 30.10.2011
comment
Мне нужно было добавить $dirPath: global $dirPath; если (filemtime($dirPath . $a) == filemtime($dirPath . $b)) . . . - person Atara; 28.03.2012

Как упомянул Майкл Берковски, использование usort() — это путь, но если это одноразовая сортировка (т.е. вам нужно отсортировать массив таким образом только один раз в вашем коде), вы можете использовать анонимную функцию:

usort($files, function ($a, $b){
    if (filemtime($a) === filemtime($b)) return 0;
    return filemtime($a) < filemtime($b) ? -1 : 1; 
});

Хотя это и не обязательно, он сохраняет вызов функции.

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

person acharris    schedule 19.05.2017