Упорядочивать в дату array файлов

У меня есть маленький рукописный шрифт PHP, чтобы отображать файлы папок на сервере, но сначала я нуждаюсь в том, чтобы упорядочить файлы из-за самых недавних и не знаю, где размещать asort в коде далее:

if($folder) {
   if(strstr($folder,'..')) exit(ERROR_MESAGE);
       $dir = @opendir('./'.$folder);
   } else {
       $dir = @opendir('./');
   } 

   while($file = @readdir($dir)) {
      if($file != '.' && $file != 'Índex.php' && $file != '.htaccess' && $file != 'css' &&$file !='.nomedia') {
          if($con < $n) {
             $con++; 
             continue;
          }

   if($sok < FILES_ON_PAGE) {
       $name = $file;
       $er = strrchr($name,'.');
       if(file_exists($folder.'/in.html')) 
           require_once($folder.'/in.html');
       if(file_exists($folder.'/1.txt')) 
           require_once($folder.'/1.txt');
       if($folder) {
           $sz = filesize($folder.'/'.$file);
           $file = $folder.'/'.$file;
       }   else  {
           $sz = filesize($file);
       }
       $fsize = round($sz/1024,1);

       if(is_file($file))           
       { `

Я нуждаюсь в том, чтобы переместить один asort() в файлах и я не нахожу способ это получать: как я могу делать это?

3
задан 23.01.2016, 07:14
3 ответа

Согласно документации, использовав readdir файлы возвращаются в том же порядке, в котором они находятся в системе (которая могла бы быть любой вещью с даты создания в алфавитный порядок), и не возможно контролировать этот порядок априори.

Выбор состоял бы в том, чтобы создавать array с информацией, в котором ты нуждался бы файлов (по крайней мере имя, которое является тем, что используется в коде наверху, больше дата, которая будет использована для распорядка), тогда упорядочивать этот array и действовать с ним вместо прямо с результатом readdir.

Для этого ты нуждался бы:

  • Объявлять класс для файлов, например:

    class MiArchivo {
        public $nombre = "";
        public $fecha = 0;
        function __construct($nombre, $fecha) {
            $this->nombre = $nombre;
            $this->fecha  = $fecha;
        }
    }
    
  • Создавать пустой array, где будут класться файлы:

    $misarchivos = array();
    
  • Создавать функцию сравнения, которое было использовано с usort чтобы упорядочивать array объектов:

    function comparaMiArchivo($a, $b) {
        return $a->fecha < $b->fecha;
    }
    

Имея это в виду, шаги будучи нужно продолжать которые были бы следующими:

  1. Определи класс (ej: MiArchivo)
  2. Определи функцию сравнения (ej: comparaMiArchivo())
  3. Заявляет array, который будет содержать информацию о файлах (ej: $misarchivos)
  4. Пока бук файлы используя readdir
    1. Прочитай файл и Вашу дату изменения (используя filemtime)
    2. Создай объект класса MiArchivo
    3. Это введи в array, объявленном в шаге 3
  5. Упорядочивает array используя usort и функция сравнения, определенная в шаге 2
  6. Пересеки array применяя тот же код, который у тебя был, только, что сейчас вместо $file ты нуждался бы в чем-то как $misarchivos[x]->nombre.

Код был бы чем-то как это:

class MiArchivo {
    public $nombre = "";
    public $fecha = 0;

    function __construct($nombre, $fecha) {
        $this->nombre = $nombre;
        $this->fecha  = $fecha;
    }
}

function comparaMiArchivo($a, $b) {
    return $a->fecha < $b->fecha;
}

$misarchivos = array();

if($folder) {
    if(strstr($folder,'..')) exit(ERROR_MESAGE);
    $dir = @opendir('./'.$folder);
} else {
    $dir = @opendir('./');
} 

while($file = @readdir($dir)) {
    array_push($misarchivos, new MiArchivo($file, filemtime($folder ."./" . $file)));
}

usort($misarchivos, "comparaMiArchivo");

// a partir de aquí el array de archivos está ordenado de más reciente a más antiguo

foreach($misarchivos as $file) {

    // el mismo código que tenías, pero en lugar de $file sería $file->nombre
    if($file->nombre != '.' && $file->nombre != 'Índex.php' && $file->nombre != '.htaccess' && $file->nombre != 'css' &&$file->nombre !='.nomedia') {
        if($con < $n) {
            $con++; 
            continue;
         }

         ....
4
ответ дан 24.11.2019, 14:58
  • 1
    У меня совсем не осталось больше, что говорить..... Ты - бог Эн Програмаси и # 243; n. ФУНКЦИОНИРУЙ ВЕРНО. СПАСИБО БЕСКОНЕЧНЫЕ Я начинаю спасибо;: D – Bryan B Weiss 23.01.2016, 20:55

PodrГ-схвати делать что-то asГ-:

<?php
//Directorio a listar
$path = './pdf';
//Abre un enlace al directorio
$dir = opendir($path);
//Iteramos el directorio
while($file=readdir($dir)){
    if(!is_dir($file)){
        //Guardamos en un array el archivo y la fecha del mismo
        $data[] = array($file, date("Y-m-d H:i:s",filemtime($path.'/'.$file)));
        //obtenemos las fechas de cada archivo, que sirven para ordenar el array anterior con la funcion array_multisort
        $dates[] = date("Y-m-d H:i:s",filemtime($path.'/'.$file));
    }
}
//cerramos el enlace al directorio
closedir($dir);
//ordenamos el array data según las fechas almacenadas en $dates
array_multisort($dates, SORT_DESC, $data);

//Mostramos el resultado despues de ordenar
echo "<pre>";
echo "Arreglo de fechas para ordenar";
echo "<br/>";
print_r($dates);

echo "Archivos ordenados";
echo "<br/>";
print_r($data);
echo "</pre>";
?>
1
ответ дан 24.11.2019, 14:58
  • 1
    Превосходный Уже у меня есть Другой М и # 233; совсем Большое спасибо!!!! – Bryan B Weiss 23.01.2016, 20:56

Я получил бы файлы с функцией glob() эта функция сохраняй файлы в array даже также сохраняй tamaГ±o и последняя дата изменения каждого, и были в одном array, ты мог бы делать asort() уже будьте из-за даты, tamaГ±o или имя.

0
ответ дан 24.11.2019, 14:58
  • 1
    Быть и # 237; в большой помощи, если ты мог поставлять implementaci и # 243; n алгоритма, который ты описываешь. Считай, что этот publicaci и # 243; n он не является одиноким для автора, а для потомства и будущего лектората, которые посещали бы этот вопрос и Ваши ответы. –  03.09.2016, 22:18