Включить 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" } 

Как удалить "." и ".." из массива?

Вы можете использовать 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); 

http://php.net/manual/en/function.array-diff.php

Вы можете использовать этот фрагмент. Он возвращает только файлы в каталоге:

 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));