У меня есть массив, который я возвращаюсь из 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" }
Как удалить "."
и ".."
из массива?
Вы можете использовать array_filter .
$indir = array_filter(scandir('../pages'), function($item) { return !is_dir('../pages/' . $item); });
Обратите внимание, что это отфильтровывает все каталоги и оставляет только файлы и символические ссылки. Если вы действительно хотите только исключить только файлы (и каталоги), начиная с .
, тогда вы можете сделать что-то вроде:
$indir = array_filter(scandir('../pages'), function($item) { return $item[0] !== '.'; });
Самый быстрый способ удалить точки в виде файлов в scandir
<?php $files = array_slice(scandir('/path/to/directory/'), 2); ?>
Из руководства по PHP
array_diff
сделает то, что вы ищете:
$indir = scandir('../pages'); $fileextensions = array(".", "php", "html", "htm", "shtml"); $indir = array_diff($indir, array('.', '..')); $replaceextensions = str_replace($fileextensions, "", $indir);
Вы можете использовать этот фрагмент. Он возвращает только файлы в каталоге:
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>";
Я знаю, что erknrio предоставил ответ для этого, но вот более чистый способ получить массив файлов без каталогов (модифицированный для повышения эффективности):
$dirPath = 'dashboard'; $dir = scandir($dirPath); foreach($dir as $index => &$item) { if(is_dir($dirPath. '/' . $item)) { unset($dir[$index]); } } $dir = array_values($dir);
с$dirPath = 'dashboard'; $dir = scandir($dirPath); foreach($dir as $index => &$item) { if(is_dir($dirPath. '/' . $item)) { unset($dir[$index]); } } $dir = array_values($dir);
просто используйте preg_replace, чтобы удалить все скрытые файлы из каталога
$files = array(".", "..", "html", ".~html", "shtml"); $newfiles = preg_grep('/^([^.])/', scandir($files));