Задать вопрос
@sl1m_dogg

Не работает сортировка по дате php. Что может быть не так?

Всем привет. Не могу отсортировать массив по дате. Дата - это дата создания файла. Помогите кто может, уже все интернеты облазил.

function array_sort_by_column($array, $column, $direction = SORT_ASC) {
$reference_array = array();
$i = 0;

foreach($array as $key => $row) {
$reference_array[$key] = $array[$column][$i];
$i++;
}

array_multisort($reference_array, $direction, $array);

return $array;
}

$array:

functions.php 43.30K 2014-09-29 09:42:21
wpdb_vooq.sql 479.09K 2014-09-29 11:31:23
simple-cart-buy-now(1).zip 149.48K 2014-09-29 09:43:00
jdk-8u20-linux-i586.tar.gz 154.87M 2014-09-29 10:36:40
isotope-master.zip 75.71K 2014-09-29 09:42:26
userinfo.php 14.96K 2014-09-29 09:48:02
default (1).php 13.96K 2014-09-29 11:04:38
yii-master.zip 10.38M 2014-09-29 11:31:38
gamma(1).rar 1.01M 2014-09-29 09:42:39
auremo_w_catalog_yii_rating.sql 1.53K 2014-09-29 09:45:56
boxes.pptx 38.14K 2014-09-29 09:42:34


$data['date'][] = date("Y-m-d H:i:s", filectime($dir.SEP.$value));


код возвращающий список файлов:

function treeList($dir = "") {
	$i = 0;
  if (is_dir($dir)) {
     if ($dh = opendir($dir)) {
         while (($file = readdir($dh)) !== false) {
         	if (!is_dir($file)){
             $data['file'][] = $file;
         	}
         }
         foreach ($data['file'] as $key => $value) {
         	$data['size'][] = human_filesize(filesize($dir.SEP.$value));
         	$data['date'][] = date("Y-m-d H:i:s", filectime($dir.SEP.$value));
         }
         closedir($dh);
     }
    array_sort_by_column($data, 'date');
  }

  return $data;
  }


Updated
первые три файла когда загружаю все сортирует норм, а потом вообще в непонятном порядке выводит

Updated 2
Undefined index: date in
function cmp($a, $b)
{
	$t1 = strtotime($a["date"]);
	$t2 = strtotime($b["date"]);

    return ($t2<$t1) ? -1 : 1;
}
  • Вопрос задан
  • 2967 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Как-то сложно все у вас.

1) зачем переводить число, удобное для сортировки, в строку?
2) почему бы не использовать usort/uasort?

$files = ['some.txt']; // например через glob получаем список файлов
$cTimes = array_map(function ($file) {
    return filectime($file);
}, $files);
$data = array_combine($files, $cTimes);
uasort($data, function ($a, $b) {
    return $a - $b;
});
$sortedFiles = array_keys($data);
Ответ написан
Может для надёжности дату в timestamp перевести и потом по нему отсортировать?
Ответ написан
rdifb0
@rdifb0
Программист, реалист
Если вы результат выполнения функции не будете отправлять к праотцам, то возможно все будет сортироваться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы