PHP(文件夹)文件按照字母顺序列出?(PHP (folder) File Listing in A

2019-06-25 09:40发布

我不知道如何简单这将是,但我使用它从一个特定的文件夹中显示该文件的脚本,但我希望他们可以按字母顺序显示,这将是很难做到这一点? 下面是我使用的代码:

if ($handle = opendir($mainframe->getCfg( 'absolute_path' ) ."/images/store/")) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..")  {
                if (($file != "index.html")&&($file != "index.php")&&($file != "Thumbs.db")) {
                $strExt = end(explode(".", $file));
                    if ($strExt == 'jpg') {
                        $Link = 'index.php?option=com_shop&task=deleteFile&file[]='.$file;
                        $thelist .= '<tr class="row0"><td nowrap="nowrap"><a href="'.$Link.'">'.$file.'</a></td>'."\n";
                        $thelist .= '<td align="center" class="order"><a href="'.$Link.'" title="delete"><img src="/administrator/images/publish_x.png" width="16" height="16" alt="delete"></a></td></tr>'."\n";
                    }

                }
            }
        }
        closedir($handle); 
    }   
    echo $thelist;

:)

Answer 1:

而不是使用readdir你可以简单地使用scandir ( 文件 ),在默认情况下的字母顺序排列。

的返回值scandir是一个数组,而不是一个字符串,那么你的代码将不得不略作调整,遍历数组,而不是检查最终在null返回值。 此外, scandir需要与目录路径,而不是一个文件句柄作为输入一个字符串,新版本将是这个样子:

foreach(scandir($mainframe->getCfg( 'absolute_path' ) ."/images/store/") as $file) {
  // rest of the loop could remain unchanged
}


Answer 2:

这代码看起来相当混乱。 您可以通过演示分开的目录遍历逻辑。 一个更简洁的版本(在我看来):

<?php

// Head of page
$it = new DirectoryIterator($mainframe->getCfg('absolute_path') . '/images/store/'));

foreach ($it as $file) {
    if (preg_match('#\.jpe?g$#', $file->getFilename()))
        $files[] = $file->getFilename();
}
sort($files);

// Further down
foreach ($files as $file)
    // display links to delete file.
?>

你甚至都不需要担心打开或关闭把手,因为你使用正则表达式检查文件名,你不需要任何爆炸或条件检查。



Answer 3:

我喜欢通配它使目录读一扣,因为它返回一个数组这是很容易排序:

<?php
$files = glob("*.txt");
sort($files);
foreach ($files as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>


Answer 4:

如果您使用Joomla1.5你应该使用定义的常量JPATH_BASE代替

$mainframe->getCfg( 'absolute_path' )

如果这是一个Joomla扩展,你会分发,不使用SCANDIR(),因为它不仅是PHP5。

做的最好的事情就是使用Joomla的API。 它有一个是分层要做到这一点通过不同的网络和协议的目录和文件访问的类。 因此,文件系统可以是通过FTP例如,与类可以被扩展用于任意网络/协议。

jimport( 'joomla.filesystem.folder' );
$files = JFolder::files(JPATH_BASE."/images/store/");
sort($files); 
foreach($files as $file) { 
   // do your filtering and other task
}

您也可以通过()正则表达式作为第二个参数JFolder ::文件过滤您收到的文件。

你也不想使用URL文字像/管理员/因为它们是可以改变的。 使用JURI方法,如:

JURI ::基();

如果你想确保表,在CSS的Joomla类:

'<tr class="row0">'

使用:

'<tr class="row'.($i&1).'">'

其中$ i是迭代的次数。 这使您交替的0和1组成的序列。



Answer 5:

如果我们的PHP内置的功能,经常使用它,他们更快。 使用水珠,而不是遍历文件夹,如果它符合您的需求。

$ FOLDER_NAMES =阵列(); $ FOLDER_NAMES =水珠( '*',GLOB_ONLYDIR + GLOB_MARK + GLOB_NOSORT);

  • 调用它删除GLOB_ONLYDIR包含文件太前returs在当前目录下,使用CHDIR()的一切是唯一的文件)GLOB_MARK是用于添加到文件夹名称的斜线删除GLOB_NOSORT不排序的数组


文章来源: PHP (folder) File Listing in Alphabetical Order?