Ограничение количества папок, возвращаемых в списке каталогов в php - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь перечислить каталог файлов, которые обновляются каждую неделю. Каждое обновление находится в новой папке, поэтому я написал php, чтобы он читал каталог обновлений и перечислял все папки с изображением значка, которое находится в каждой папке.

Все работает замечательно, но моя проблема в том, что есть сотни старых обновлений, но на самом деле самые последние из них должны быть перечислены ... максимум за последние 20 недель.

Итак, мой вопрос, как ограничить количество папок, возвращаемых из каталога? Я выполнил поиск и не до конца понимаю объяснения, которые нашел, поэтому подумал, что спросить здесь.

Заранее большое спасибо,

Кирсти

$cols   = 6; # Number of columns to display 

echo '<div id="updates">';  
echo '<table><tr>
      <th><img class="new" src="new.gif" alt="new" width="39" height="20"></td>
      <th>&nbsp;</td>
      <th>&nbsp;</td>
      <th>&nbsp;</td>
      <th>&nbsp;</td>
      <th>&nbsp;</td>
    </tr>';


    $dirs = scandir("update");
    $dirs = glob("update/*", GLOB_ONLYDIR);
            rsort($dirs);
        foreach($dirs as $update) {
            foreach($dirs as $dir) {

            if($colCtr == 0) echo '<tr>';

            echo '<td><img src="' . $dir . '/5.jpg" alt=""></a></td>';

  $colCtr++;
  if ($colCtr == $cols){
      echo '</tr>';
      $colCtr = 0;
 }
}
}

echo '</table>

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы ищете stat() (https://www.php.net/manual/en/function.stat). Вот обновленный код:

PS: я исправил некоторые отступы вместе с правильным закрытием тега.

<?php

// how many weeks of modification to go back..
$numWeeks = 20;

$cols = 6;

echo '<div id="updates">
        <table>
          <tr>
            <th><img class="new" src="new.gif" alt="new" width="39" height="20" /></th>
            <th>&nbsp;</th>
            <th>&nbsp;</th>
            <th>&nbsp;</th>
            <th>&nbsp;</th>
            <th>&nbsp;</th>
          </tr>';

$dirs = scandir("update");
$dirs = glob("update/*", GLOB_ONLYDIR);

rsort($dirs);

foreach ($dirs as $update) {
  foreach ($dirs as $dir) {

    $dirStat = stat($dir);
    $mTime = $dirStat["mtime"];

    if (time() - $mTime > ($numWeeks * 7 * 24 * 60 * 60)) {
      continue;
    }

    if ($colCtr == 0) {
      echo '<tr>';
    }

    echo '<td><img src="' . $dir . '/5.jpg" alt="" /></td>';

    $colCtr++;
    if ($colCtr == $cols) {
      echo '</tr>';
      $colCtr = 0;
    }
  }
}

echo '</table>';

PPS: Это было просто собрано довольно быстро - я не сделал есть шанс проверить это. Надеюсь, это поможет независимо!

0 голосов
/ 28 апреля 2020

Просто установите предел. В этом упрощенном примере будет отображаться до 10 каталогов обновлений.

  • Для каждой итерации уменьшайте его.
  • Когда ограничение уменьшается до 0, вырывается из l oop.
$dirs = glob("update/*", GLOB_ONLYDIR);
rsort($dirs);

$limit = 10;
foreach($dirs as $update) {
    foreach($dirs as $dir) {
        echo $dir, PHP_EOL;
    }
    if(!--$limit) break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...