使用PHP DirectoryIterator列出和排序文件
我正在使用DirectoryIterator生成PDF文件的链接列表。(还有一些代码可以分解文件名,使列表更加方便用户。)我想按文件名对结果进行排序,但不知道如何排序。我知道我需要将结果放入数组,然后对数组进行排序。但是,我在任何地方都找不到与我完全相同的示例,因此我无法找出如何将数组/排序集成到我的代码中,因为我的PHP很弱。有人能帮忙吗 ($path在页面的其他位置声明)使用PHP DirectoryIterator列出和排序文件,php,sorting,Php,Sorting,我正在使用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) ){
}
}