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

Pourquoi est-ce que chaque fois que j'utilise scandir() je reçois des périodes 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] => .
)
24
demandé sur Mat 2011-08-20 18:33:07

4 réponses

Ceux qui sont au courant (.) et parent (..) répertoires. 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
répondu Mat 2011-08-20 14:36:23

il y a deux entrées présentes dans chaque répertoire:

  • . renvoie au répertoire courant
  • .. désigne le répertoire parent (ou de la racine, si le répertoire courant est la racine)

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

$allFiles = scandir(__DIR__); // Or any other directory
$files = array_diff($allFiles, array('.', '..'));
91
répondu phihag 2011-08-20 14:36:58

dans la convention Unix . est un lien vers le répertoire courant .. est un lien vers le répertoire parent. Tous les deux existent en tant que fichier dans l'index des répertoires.

4
répondu Jeremy 2011-08-20 14:36:30

supprimer . et ..scandir utiliser cette fonction:

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

array_values la commande re-indexe le tableau de façon à ce qu'il démarre à partir de 0. Si vous n'avez pas besoin du tableau de réindexation, alors la réponse acceptée fonctionnera très bien. Tout simplement: array_diff(scandir($dir), array('..', '.')).

1
répondu Dan Bray 2017-09-01 12:46:34