Максимальное количество результатов после сортировки по времени - PullRequest
1 голос
/ 23 мая 2011

Я бы хотел ограничить результаты, возвращаемые после перемещения файлов в каталоге и сортировки их по времени.И на случай, если в каталоге нет файлов, я бы хотел добавить фразу if file exists.Вот код на данный момент.

$list = glob('items/*.html');
usort(
   $list,
   create_function('$a,$b', 'return filemtime($a) < filemtime($b);')
);


foreach($list as $file)
{
    include $file;
}

Теперь я предполагаю, что, вероятно, я могу выполнить часть if (file_exists()) следующим образом:

foreach($list as $file)
{
 if (file_exists($file)) {
    include $file;}
}

часть без ошибок, но гдесделать счет до 5 или 7?

Ответы [ 3 ]

1 голос
/ 23 мая 2011

glob возвращает пустой массив, если в каталоге нет файлов. Это означает, что file_exists будет бесполезным, как если бы у вас было значение из glob, оно существовало бы.

Если glob как-то не работает, он вернет false. Ваш скрипт выдаст несколько ошибок, если это произойдет. Попробуйте проверить массив перед foreach, используя is_array .

1 голос
/ 23 мая 2011
$limit=5;
$list = glob('items/*.html');
usort(
   $list,
   create_function('$a,$b', 'return filemtime($a) < filemtime($b);')
);  

$list=array_slice($list, 0, $limit);

foreach($list as $file) {
    include $file;
}

На самом деле нет необходимости выполнять file_exists() запрос здесь, потому что если glob найдет его, он должен существовать. Возможно, вы захотите сделать is_readable(), но в этом случае вы можете переписать его так:

$limit=5;
$list = glob('items/*.html');
usort(
   $list,
   create_function('$a,$b', 'return filemtime($a) < filemtime($b);')
);  

$i=0;    
foreach($list as $file) {
    if ($i < $limit && is_readable($file)) {
         include $file;
         $i++;
    }
}

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

$list = glob('items/*.html');
if ($list===false) {
    /*handle error (or simply $list=array() if you don't care)*/
}
0 голосов
/ 23 мая 2011

try (для включения максимально 5 файлов)

foreach($list as $k=>$v)
{
  if($k<5 && file_exists($v))
    include_once $file;
  else
      break;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...