Включить JUST файлы в массив scandir?
У меня есть массив, который я возвращаюсь из scandir, но он содержит "."
и ".."
, и я не хочу его.
Мой код:
$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$replaceextensions = str_replace($fileextensions, "", $indir);
Я делаю замену строки на расширениях файлов, вызывая [0] и [1] пустыми, но они "."
и ".."
array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}
Как удалить "."
и ".."
из массива?
Ответы
Ответ 1
Вы можете использовать array_filter.
$indir = array_filter(scandir('../pages'), function($item) {
return !is_dir('../pages/' . $item);
});
Примечание. Это отфильтровывает все каталоги и оставляет только файлы и символические ссылки. Если вы действительно хотите только исключить только файлы (и каталоги), начиная с .
, тогда вы можете сделать что-то вроде:
$indir = array_filter(scandir('../pages'), function($item) {
return $item[0] !== '.';
});
Ответ 2
Самый быстрый способ удаления точек в виде файлов в scandir
<?php
$files = array_slice(scandir('/path/to/directory/'), 2);
?>
Из Руководство по PHP
Ответ 3
array_diff
сделает то, что вы ищете:
$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$indir = array_diff($indir, array('.', '..'));
$replaceextensions = str_replace($fileextensions, "", $indir);
http://php.net/manual/en/function.array-diff.php
Ответ 4
Вы можете использовать этот фрагмент. Он возвращает только файлы в каталоге:
function only_files($dir_element) {
if (!is_dir($dir_element)) {
return $dir_element;
}
}
function givemefiles($dir) {
$scanned_dir = scandir($dir);
return array_filter($scanned_dir, "only_files");
}
$dir_path = '../pages';
givemefiles($dir_path);
echo "<pre>";
var_dump($scanned_dir);
echo "</pre>";
Ответ 5
Я знаю, что erknrio предоставил ответ для этого, но вот более чистый способ получить массив файлов без каталогов (модифицированный для повышения эффективности):
$dirPath = 'dashboard';
$dir = scandir($dirPath);
foreach($dir as $index => &$item)
{
if(is_dir($dirPath. '/' . $item))
{
unset($dir[$index]);
}
}
$dir = array_values($dir);
Ответ 6
просто используйте preg_replace для удаления всех скрытых файлов из каталога
$files = array(".", "..", "html", ".~html", "shtml");
$newfiles = preg_grep('/^([^.])/', scandir($files));