0

如果有 2 个文件夹名称13in ./path/1 ./path/3,现在我尝试添加一个新文件夹,但是如何对已经存在的文件夹名称进行排序并找到缺少的数字是2

<?php 
    $file = 0;
    $folder = 0;
    $dir = new RecursiveDirectoryIterator('./img/product/tmp', FilesystemIterator::SKIP_DOTS);
    $it  = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
    $it->setMaxDepth(0);
    foreach ($it as $fileinfo) {
        if ($fileinfo->isDir()) {
            printf("Folder - %s\n", $fileinfo->getFilename());
            $folder++;
        } elseif ($fileinfo->isFile()) {
            printf("File From %s - %s\n", $it->getSubPath(), $fileinfo->getFilename());
            $file++;
        }
    }

    if(/* find the missing number */){
        $folder_new = //missing number
        $dir = './path/'.$folder_new;
        if(!is_dir($dir)){
        mkdir($dir);
    }else{
        $folder_new = $folder+1;
        $dir = './path/'.$folder_new;
        if(!is_dir($dir)){
            mkdir($dir);
        }
    }
?>
4

3 回答 3

1

基本上:

$root = $_SERVER['DOCUMENT_ROOT']; // '.' doesn't work on the backend for going to the root.
$path = "$root/path/";

$dirs = glob("$path*"); // this creates an array with everything inside $path
sort($dirs); //you wanted the directories sorted

//deleting the files (not dirs)
foreach($dirs as $k => $dir){
    if(!is_dir($dir)){
        unset($dirs[$k]);
    }
}

$max = array_max($dirs); //folder number with the highest number as name.

// this is the part finding out what number is missing
    for($i = 0; $i <= $max; $i++){
        if(!is_dir($path.$i){
            mkdir($path.$i);
        }
    }

没有测试,只是从我的脑海中写出来的,希望它对你有用:)

于 2013-03-15T10:39:55.583 回答
0

你想做这样的事情吗?

<?php

$to = 5;

for ($i = 1; $i <= $to; $i++) {
  echo '<br/>';
  $my_path = dirname(__FILE__) . '/path/' . $i;
  if (!is_dir($my_path)) {
    echo $i . ' dir not exist ';
    if (mkdir($my_path, 0777)) {
      echo $i . ' dir created ';
    } else {
      echo $i . ' dir not created ';
    }
  } else {
    echo $i . ' dir already exists ';
  }
}
?>
于 2013-03-15T10:49:04.427 回答
0

我会认为,如果您可以获取目录(./path)中的文件夹列表,那么您可以比较以查看存在哪些目录:

for ( $i = 0; $i < 100; $i++ ) {
  if (  ! is_dir( './path/' . $i ) ) {
    mkdir( './path/' . $i );
  }
}
于 2013-03-15T10:40:40.770 回答