@Arthur81624

Как исключить подсчёт ненужных файлов в папке?

Всем привет. Для подсчёта количества файлов в директории, я пользуюсь вот этим:
<?php count(array_filter(glob('dir/*'), 'is_file')); ?>
Но индексный файл, например, мне считать-то не нужно. Вот чего сейчас залепил:
<?php $count = count(array_filter(glob('dir/*'), 'is_file')); if($count > 0) --$count; ?>
Но и это не всегда работает. Подскажите, пожалуйста, как исключить не нужные мне файлы?
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
mahoho
@mahoho
Full stack certified PHP developer.
<?php

$dir = '/path/to/dir';

function countFilesInDir($pathToDir, array $exludes = []){
	$filesCount = 0;
	$directoryIterator = new DirectoryIterator($pathToDir);

	foreach ($directoryIterator as $file){
		if ($file->isDot()) continue;

		/**
		 * @var SPLFileInfo $file
		 */
		if (in_array($file->getBasename(), $exludes)) continue;

		if ($file->isFile()){
			$filesCount++;
		}
	}

	return $filesCount;
}

echo countFilesInDir($dir, ['index.php']);

Легко дорабатывается в рекурсивный вариант при помощи DirectoryRecursiveIterator.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
public function getCountFiles($globMask, array $without = [])
{
    if (!is_string($globMask)) {
        throw new \InvalidArrayException(
            sprintf('Argument "$globMask" must be "string", actual type: "%s"', gettype($globMask))
        );
    }

    $filterCallback = function ($path) use ($without) {
        return is_file($path) && !in_array($path, $without);
    };

    return count(array_filter(glob($globMask), $filterCallback));
}
Ответ написан
@lnked
count(array_diff(array_filter(glob('dir/*'), 'is_file'), array( 'index.php', 'any.txt' )))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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