web-dev-qa-db-fra.com

Pourquoi est-ce que chaque fois que j'utilise scandir (), je reçois des points au début du tableau?

Pourquoi est-ce que chaque fois que j'utilise scandir (), je reçois des points au début du tableau?

Array
(
    [0] => .
    [1] => ..
    [2] => bar.php
    [3] => foo.txt
    [4] => somedir
)
Array
(
    [0] => somedir
    [1] => foo.txt
    [2] => bar.php
    [3] => ..
    [4] => .
)
26
DividedDreams

Ce sont les répertoires actuel (.) et parent (..). Ils sont présents dans tous les répertoires et sont utilisés pour désigner le répertoire lui-même et son parent direct.

26
Mat

Il y a deux entrées présentes dans chaque liste de répertoire:

  • . fait référence au répertoire en cours
  • .. fait référence au répertoire parent (ou à la racine, si le répertoire actuel est la racine)

Vous pouvez les supprimer des résultats en les filtrant des résultats de scandir:

$allFiles = scandir(__DIR__); // Or any other directory
$files = array_diff($allFiles, array('.', '..'));
94
phihag

En convention Unix. est un lien vers le répertoire en cours alors que .. est un lien vers le répertoire parent. Les deux existent sous forme de fichier dans l'index du répertoire. 

4
Jeremy

Pour supprimer . et .. de scandir, utilisez cette fonction:

function scandir1($dir)
{
    return array_values(array_diff(scandir($dir), array('..', '.')));
}

La commande array_values réindexe le tableau afin qu'il commence à 0. Si vous n'avez pas besoin de réindexer le tableau, la réponse acceptée fonctionnera correctement. Simplement: array_diff(scandir($dir), array('..', '.')).

3
Dan Bray

Dans une ligne de code:

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