Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP DirectoryIterator列出和排序文件_Php_Sorting - Fatal编程技术网

使用PHP DirectoryIterator列出和排序文件

使用PHP DirectoryIterator列出和排序文件,php,sorting,Php,Sorting,我正在使用DirectoryIterator生成PDF文件的链接列表。(还有一些代码可以分解文件名,使列表更加方便用户。)我想按文件名对结果进行排序,但不知道如何排序。我知道我需要将结果放入数组,然后对数组进行排序。但是,我在任何地方都找不到与我完全相同的示例,因此我无法找出如何将数组/排序集成到我的代码中,因为我的PHP很弱。有人能帮忙吗 ($path在页面的其他位置声明) 将有效文件放入一个包含各种列的数组中,您可以根据这些列进行排序,这可能是最好的选择,同时也是一种关联选择 我使用了“排序

我正在使用DirectoryIterator生成PDF文件的链接列表。(还有一些代码可以分解文件名,使列表更加方便用户。)我想按文件名对结果进行排序,但不知道如何排序。我知道我需要将结果放入数组,然后对数组进行排序。但是,我在任何地方都找不到与我完全相同的示例,因此我无法找出如何将数组/排序集成到我的代码中,因为我的PHP很弱。有人能帮忙吗

($path在页面的其他位置声明)


将有效文件放入一个包含各种列的数组中,您可以根据这些列进行排序,这可能是最好的选择,同时也是一种关联选择

我使用了“排序数组并维护索引关联”,我认为这最符合您的要求

if (is_dir($path)) 
{
    $FoundFiles = [];

    foreach (new DirectoryIterator($path) as $file) 
    {

       if ($file->isDot())
       {
          continue;
       }
    
       $fileName = $file->getFilename();

       $pieces    = explode('.', $fileName);
       $date      = explode('-', $pieces[2]);
                
       $filetypes = [ "pdf", "PDF" ];
       $filetype  = pathinfo( $file, PATHINFO_EXTENSION );

       if ( in_array( strtolower( $filetype ), $filetypes )) 
       {
          /** 
           *  Place into an Array
          **/
          $foundFiles[] = array( 
              "fileName" => $fileName,
              "date"     => $date
          );       
       }
    }
 }
分拣前 排序后
asort()
然后,对于在函数完成后使用HTML打印,您的代码在代码处于循环中时执行此操作,这意味着您无法在打印后对其进行排序:

<ul>
   <?php foreach( $foundFiles as $file ): ?>
      <li>File: <?php echo $file["fileName"] ?> - Date Uploaded: <?php echo $file["date"]; ?></li>
   <?php endforeach; ?>
</ul>
  • 文件:-上载日期:

使用scandir而不是DirectoryIterator获取文件的排序列表:

$path = "../images/";

foreach (scandir($path) as $file){

    if($file[0] == '.'){continue;}//hidden file

    if( is_file($path.$file) ){

    }else if( is_dir($path.$file) ){

    }
}
scandir区分大小写。有关不区分大小写的排序,请参见以下答案:

请看这个问题@Matei Mihai我见过这个问题,但PHP逻辑不同,我不知道如何使其适用于上面的代码。我也不知道在那个例子中,一个键应该使用什么,文件名?@Nathan,
$nameprovered
是如何定义的?@Fred代码前面也有定义。它来自一个MySQL数据库。非常感谢您解释我哪里出错了(在循环中打印)以及如何实现我的目标!
/** 
 *   Sort the Array by FileName (The first key)
 *   We'll be using asort()
**/ 
asort( $foundFiles );

/** 
 *   After Sorting 
**/ 
print_r( $foundFiles );

Array
(
    [2] => Array
        (
            [fileName] => animate.pdf
            [date] => 22/01/53
        )

    [0] => Array
        (
            [fileName] => readme.pdf
            [date] => 22/01/23
        )

    [1] => Array
        (
            [fileName] => zibra.pdf
            [date] => 22/01/53
        )
 )
<ul>
   <?php foreach( $foundFiles as $file ): ?>
      <li>File: <?php echo $file["fileName"] ?> - Date Uploaded: <?php echo $file["date"]; ?></li>
   <?php endforeach; ?>
</ul>
$path = "../images/";

foreach (scandir($path) as $file){

    if($file[0] == '.'){continue;}//hidden file

    if( is_file($path.$file) ){

    }else if( is_dir($path.$file) ){

    }
}