php - files - ¿Incluir archivos JUST en la matriz de scandir?
scandir php example (6)
La forma más rápida de eliminar puntos como archivos en scandir
$files = array_slice(scandir(''/path/to/directory/''), 2);
Del manual de PHP
Tengo una matriz que estoy recuperando de scandir, pero contiene "."
y ".."
y no quiero que lo haga.
Mi código:
$indir = scandir(''../pages'');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$replaceextensions = str_replace($fileextensions, "", $indir);
Estoy haciendo un reemplazo de cadena en las extensiones de archivo, lo que hace que [0] y [1] aparezcan vacíos, pero son "."
y ".."
array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}
¿Cómo eliminaría el "."
y ".."
de la matriz?
Puedes usar array_filter .
$indir = array_filter(scandir(''../pages''), function($item) {
return !is_dir(''../pages/'' . $item);
});
Tenga en cuenta que esto filtra todos los directorios y deja solo archivos y enlaces simbólicos. Si realmente desea excluir solo los archivos (y directorios) que comienzan con .
, entonces podrías hacer algo como:
$indir = array_filter(scandir(''../pages''), function($item) {
return $item[0] !== ''.'';
});
Puedes usar este fragmento. Sólo devuelve archivos en el directorio:
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>";
Soy consciente de que Erknrio proporcionó una respuesta para esto, pero aquí hay una forma más limpia de obtener una serie de archivos sin directorios (modificados para ser más eficientes):
$dirPath = ''dashboard'';
$dir = scandir($dirPath);
foreach($dir as $index => &$item)
{
if(is_dir($dirPath. ''/'' . $item))
{
unset($dir[$index]);
}
}
$dir = array_values($dir);
simplemente use preg_replace para eliminar todo tipo de archivos ocultos del directorio
$files = array(".", "..", "html", ".~html", "shtml");
$newfiles = preg_grep(''/^([^.])/'', scandir($files));
array_diff
hará lo que estás buscando:
$indir = scandir(''../pages'');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$indir = array_diff($indir, array(''.'', ''..''));
$replaceextensions = str_replace($fileextensions, "", $indir);