Maison > Article > développement back-end > Comment parcourir tous les fichiers d'un répertoire en php sans récursion
Méthode d'implémentation : 1. Créer un tableau et mettre le répertoire à parcourir ; 2. Boucle pour traiter le tableau La condition pour la fin de la boucle est que le tableau soit vide ; traitez l'un des éléments du tableau et supprimez l'élément ; 4. Si cet élément est un répertoire, ajoutez tous les sous-éléments du répertoire au tableau, puis traitez les éléments jusqu'à ce que le tableau soit vide.
L'environnement d'exploitation de ce tutoriel : système windows7, version PHP7.1, ordinateur DELL G3
Si vous vouloir parcourir un certain Pour tous les fichiers d'un répertoire (y compris les sous-répertoires), la première idée qui vient à l'esprit est d'utiliser la récursion : traiter d'abord le répertoire courant, puis traiter les sous-répertoires du répertoire courant. Est-ce possible sans récursion ? Je l'ai déjà vu lorsque j'étudiais les structures de données. La récursion est en fait implémentée à l'aide de la pile. La caractéristique de la récursion est qu'elle s'appelle continuellement en premier, et l'avant-dernier appel est exécuté en second. l'appel initial est le dernier à être exécuté. Si vous comprenez le principe de récursivité, vous pouvez réellement convertir toutes les implémentations récursives en implémentations non récursives.
Parcourir tous les fichiers d'un répertoire de manière non récursive L'idée se divise principalement en les étapes suivantes :
Créez un tableau et placez le répertoire à parcourir ; (En fait, cela crée une pile)
Boucle pour traiter cela array, loop La condition de fin est que le tableau soit vide
Chaque boucle traite un élément du tableau et supprime l'élément ;
Le code écrit selon cette idée est le suivant : <?php
/**
* 遍历某个目录下的所有文件
* @param string $dir
*/
function scanAll($dir)
{
$list = array();
$list[] = $dir;
while (count($list) > 0)
{
//弹出数组最后一个元素
$file = array_pop($list);
//处理当前文件
echo $file."\r\n";
//如果是目录
if (is_dir($file))
{
$children = scandir($file);
foreach ($children as $child)
{
if ($child !== '.' && $child !== '..')
{
$list[] = $file.'/'.$child;
}
}
}
}
}
?>
Ce qui suit est l'implémentation récursive à des fins de comparaison : <?php
/**
* 遍历某个目录下的所有文件(递归实现)
* @param string $dir
*/
function scanAll2($dir)
{
echo $dir."\r\n";
if (is_dir($dir))
{
$children = scandir($dir);
foreach ($children as $child)
{
if ($child !== '.' && $child !== '..')
{
scanAll2($dir.'/'.$child);
}
}
}
}
?>
$children = array_reverse(scandir($file));
Étude recommandée. : "
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!