#php #arrays #foreach
#php #массивы #предначертание
Вопрос:
В каталоге с именем articles
у меня есть несколько .txt
файлов и несколько подкаталогов, которые представляют год (например 2020
, 2019
, 2018
и так далее …)
Структура выглядит следующим образом:
articles
|-> 2020
|-> 1.txt
2.txt
3.txt
|-> 2019
|-> 1.txt
2.txt
3.txt
|-> 2018
|-> 1.txt
2.txt
3.txt
|-> main1.txt
main2.txt
main3.txt
Как я могу получить количество всех текстовых файлов, которые находятся в подкаталогах (2020, 2019, 2018 …)
У меня уже есть это:
$archive_years = array_filter(glob('articles/*'), 'is_dir'); // read dir only
foreach($archive_years as $archive_year) {
echo count(glob($archive_year.'/*.txt')); // number of txt files form each year
// how count number of txt files from all years together??
}
Комментарии:
1. (не понизил голос) в чем проблема?
2. Поддерживайте переменную и продолжайте добавлять к ней значение count() . Я полагаю, вы не кодировали это в первую очередь.
3. Аналогичный пример, чтобы вам было проще 3v4l.org/l47pJ
4. Спасибо. Я не знал, что мне нужно было использовать
=
5. Вы также можете использовать
$count = $count count($data)
.=
это просто короткий способ написания.
Ответ №1:
Как насчет этого?
<?php
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('path/to/your/dir'));
$files = array();
foreach ($rii as $file) {
if ($file->isDir() || pathinfo($file, PATHINFO_EXTENSION) != "txt") {
continue;
}
if (!isset($files[$file->getPath()])) {
$files[$file->getPath()] = 0;
}
$files[$file->getPath()] ;
}
var_dump($files);
Например, следующий вывод — это все .cpp
файлы в каталоге моего проекта:
array(10) {
["mypath/src/networking"]=>
int(2)
["mypath/src/thirdpart/rncryptor"]=>
int(3)
["mypath/src/thirdpart/QProgressIndicator"]=>
int(1)
["mypath/src/model"]=>
int(4)
["mypath/src/views"]=>
int(8)
["mypath/src/helper"]=>
int(5)
["mypath/src/helper/deviceclient"]=>
int(3)
["mypath/src/helper/deviceclient/qwe"]=>
int(6)
["mypath/src/helper/view"]=>
int(1)
["mypath/src"]=>
int(1)
}