Php, сортировка файлов по возрастанию даты, выделение красным цветом - PullRequest
1 голос
/ 07 октября 2019

Выпуск

Как в списке PHP сортировать и сортировать файлы по возрастанию по дате и отмечать первые 3 строки / файлы (красным цветом)? Например, вот так.

<div class="red">20191010-file.xlsx</div>
<div class="red">20191009-file.xlsx</div>
<div class="red">20191008-file.xlsx</div>
20191005-file.xlsx
20191004-file.xlsx
20191003-file.xlsx
20191002-file.xlsx
20191001-file.xlsx

...

Я пытался

chdir($path);
  array_multisort(array_map('filemtime', ($files = glob("*.xlsx"))), SORT_DESC, $files);
  $reallyLastModified = reset($files);
  foreach($files as $file){
    $lastModified = date('F d Y, H:i:s',filemtime($file));
    if($file == $reallyLastModified){
      echo'
        <tr>
          <div id="p1" style="display: none;">LINK/'.$file.'</div>
          <td class="file_new"><p style="color:red;">NEWEST FILE</p><a href="LINK/'.$file.'" target="_blank">'.$file.'</a>
          <td class="file_new"><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$file.'" onclick="return confirm(\'Opravdu chcete smazat '.$file.'?\')"/></button></td>
        </tr>
      ';
      }
      else{
        echo'
        <tr>
          <div id="p1" style="display: none;">LINK/'.$file.'</div>
          <td><a href="LINK/'.$file.'" target="_blank">'.$file.'</a>
          <td><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$file.'" onclick="return confirm(\'Opravdu chcete smazat '.$file.'?\')"/></button></td>
        </tr>
        ';
      }
    }
  }

Но это только для 1 файла. Как я могу сделать это для первых 3 файлов? Или это самый простой способ, например через scandir сделать это?

Спасибо.

1 Ответ

0 голосов
/ 08 октября 2019

Для вашего кода ваш массив уже отсортирован по дате. Вы использовали array_multisort для сортировки массива. Ваш массив «$ files» отсортирован от самой новой к самой старой дате изменения. Если вы собираетесь использовать цикл «foreach», вам придется использовать счетчик, чтобы отслеживать первые 3 элемента.

Однако, если вы измените свой цикл на цикл for, вам не придется ничего отслеживать. У вас в основном есть 2 цикла for. Первый печатает первые 3 элемента, а следующий печатает остальные. Если есть только 1 файл. Этот файл будет выделен красным. Если существует более 3 файлов, первые 3 будут выделены красным, а остальные не будут.

<?php

array_multisort(array_map('filemtime', ($files = glob("*.xlsx"))), SORT_DESC, $files);
$arrLength = count($files);

for ( $i = 0; $i < ($arrLength > 3? 3 : $arrLength); $i++ ){
    echo'
    <tr>
        <div id="p1" style="display: none;">LINK/'.$files[$i].'</div>
        <td class="file_new"><p style="color:red;">NEWEST FILE</p><a href="LINK/'.$files[$i].'" target="_blank">'.$files[$i].'</a>
        <td class="file_new"><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$files[$i].'" onclick="return confirm(\'Opravdu chcete smazat '.$files[$i].'?\')"/></button></td>
    </tr>
    ';  
}

for ( $i = 3; $i < $arrLength; $i++ ){
    echo'
    <tr>
        <div id="p1" style="display: none;">LINK/'.$files[$i].'</div>
        <td><a href="LINK/'.$files[$i].'" target="_blank">'.$files[$i].'</a>
        <td><button class="button_delete" title="Smazat" type="submit" name="name" value="'.$files[$i].'" onclick="return confirm(\'Opravdu chcete smazat '.$files[$i].'?\')"/></button></td>
    </tr>
    ';
}
...