Maison  >  Article  >  développement back-end  >  5 façons d'implémenter des répertoires récursifs en PHP

5 façons d'implémenter des répertoires récursifs en PHP

墨辰丷
墨辰丷original
2018-05-31 10:13:001707parcourir

Cet article présente principalement 5 façons d'implémenter des répertoires récursifs en PHP, qui sont principalement implémentées en utilisant certaines boucles. Les amis intéressés peuvent s'y référer.

Lors du développement du projet, il est inévitable de créer des dossiers sur le serveur, comme le répertoire lors du téléchargement des images, le répertoire lors de l'analyse des modèles, etc. Ceci n'est pas utilisé dans mon projet actuel, j'ai donc résumé plusieurs méthodes de création de répertoires en boucle.

Méthode 1 : Utiliser la boucle globale

<?php
//方法一:使用glob循环
 
function myscandir1($path, &$arr) {
 
  foreach (glob($path) as $file) {
    if (is_dir($file)) {
      myscandir1($file . &#39;/*&#39;, $arr);
    } else {
 
      $arr[] = realpath($file);
    }
  }
}
?>

Méthode 2 : Utilisez la boucle dir && read

<?php
//方法二:使用dir && read循环
function myscandir2($path, &$arr) {
 
  $dir_handle = dir($path);
  while (($file = $dir_handle->read()) !== false) {
 
    $p = realpath($path . &#39;/&#39; . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
 
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir2($p, $arr);
    }
  }
}
?>

Méthode 3 : Utilisez la boucle opendir && readdir

<?php
//方法三:使用opendir && readdir循环
function myscandir3($path, &$arr) {
   
  $dir_handle = opendir($path);
  while (($file = readdir($dir_handle)) !== false) {
 
    $p = realpath($path . &#39;/&#39; . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir3($p, $arr);
    }
  }
}
 ?>

Méthode 4 : Utiliser la boucle scandir

<?php
//方法四:使用scandir循环
function myscandir4($path, &$arr) {
   
  $dir_handle = scandir($path);
  foreach ($dir_handle as $file) {
 
    $p = realpath($path . &#39;/&#39; . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir4($p, $arr);
    }
  }
}
 ?>

Méthode 5 : Utiliser la boucle SPL

 <?php
//方法五:使用SPL循环
function myscandir5($path, &$arr) {
 
  $iterator = new DirectoryIterator($path);
  foreach ($iterator as $fileinfo) {
 
    $file = $fileinfo->getFilename();
    $p = realpath($path . &#39;/&#39; . $file);
    if (!$fileinfo->isDot()) {
      $arr[] = $p;
    }
    if ($fileinfo->isDir() && !$fileinfo->isDot()) {
      myscandir5($p, $arr);
    }
  }
}
?>

Vous pouvez utiliser xdebug pour tester le durée d'exécution

<?php
myscandir1(&#39;./Code&#39;,$arr1);//0.164010047913 
myscandir2(&#39;./Code&#39;,$arr2);//0.243014097214 
myscandir3(&#39;./Code&#39;,$arr3);//0.233012914658 
myscandir4(&#39;./Code&#39;,$arr4);//0.240014076233
myscandir5(&#39;./Code&#39;,$arr5);//0.329999923706
 
 
//需要安装xdebug
echo xdebug_time_index(), "\n";
?>

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

Classe singleton de la fonction de sélection multi-bibliothèque Redis implémentée en PHP (explication détaillée)

Explication détaillée de la méthode de fonction personnalisée PHP pour déterminer si elle est soumise par Get/Post/Ajax

php Comment sauvegarder automatiquement la table de la base de données

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn