web-dev-qa-db-fra.com

Inclure les fichiers JUST dans le tableau scandir?

Je rentre de scandir, mais il contient "." et ".." et je ne le veux pas.

Mon code:

$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$replaceextensions = str_replace($fileextensions, "", $indir);

Je suis en train de remplacer les extensions de fichier par une chaîne, ce qui fait que [0] et [1] apparaissent vides, mais il s'agit de "." et de ".."

array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}

Comment pourrais-je supprimer les "." et ".." du tableau?

16
Rbn

Vous pouvez utiliser array_filter .

$indir = array_filter(scandir('../pages'), function($item) {
    return !is_dir('../pages/' . $item);
});

Notez que ceci filtre tous les répertoires et ne laisse que les fichiers et les liens symboliques. Si vous voulez vraiment n'exclure que les fichiers (et les répertoires) commençant par ., vous pouvez faire quelque chose comme:

$indir = array_filter(scandir('../pages'), function($item) {
    return $item[0] !== '.';
});
28
leftclickben

Le moyen le plus rapide de supprimer les points sous forme de fichiers dans scandir

$files = array_slice(scandir('/path/to/directory/'), 2); 

Depuis le PHP Manual

15
mintedsky

array_diff fera ce que vous cherchez: 

$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

7
Jonathan Wren

Je suis conscient que erknrio a fourni une réponse à cela, mais voici une méthode plus simple pour obtenir un tableau de fichiers sans répertoires (modifié pour être plus efficace):

$dirPath = 'dashboard';

$dir = scandir($dirPath);

foreach($dir as $index => &$item)
{
    if(is_dir($dirPath. '/' . $item))
    {
        unset($dir[$index]);
    }
}

$dir = array_values($dir);
1
FluorescentGreen5

Vous pouvez utiliser cet extrait. Il ne retourne que les fichiers dans le répertoire:

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>";
0
mrroot5

utilisez simplement preg_replace pour supprimer tout type de fichier caché du répertoire

$files = array(".", "..", "html", ".~html", "shtml");    
$newfiles = preg_grep('/^([^.])/', scandir($files));
0
Devdutt Sharma