【问题标题】:PHP sorting opendir file includesPHP排序opendir文件包括
【发布时间】:2012-06-08 03:38:00
【问题描述】:

我正在尝试对 opendir() 列表进行排序,以便它可以按照我命名的顺序显示信息。

目录中的每个文件都称为 1_something.php、2_something.php、3_something.php 等。这些文件是一小段模板化的 html,我可以根据需要更改为任何内容。

我正在使用下面的代码来提取和显示这些文件:

$dir = "./portfolio"; 
if($handle = opendir($dir)) { 
    while($file = readdir($handle)) { 
        clearstatcache(); 
        if(is_file($dir.'/'.$file)) {
            include("portfolio/".$file);
        }
    } 
closedir($handle); 
} 

我一直在尝试创建一个名称数组并对它们进行排序,但我想我不知道数组发生在哪里、排序发生在哪里以及信息的实际显示发生在哪里。

提前谢谢你。

【问题讨论】:

  • 你的clearstatcache() 可以在你的循环之外:)
  • 谢谢 Jack,我想最好只调用一次,在需要的时候,嗯?

标签: php sorting opendir


【解决方案1】:

嗯,有什么阻止你使用scandir

http://sg.php.net/manual/en/function.scandir.php

$files = scandir($dir); // returns array of files, sorted alphabetically
foreach($files as $file) {
   // your code
}

【讨论】:

  • 这有点工作,但我收到诸如警告之类的错误:include() [function.include]: Failed opening 'portfolio/..' for include (include_path='.:/usr /lib/php5') 它正在寻找一个名为portfolio/..的文件。我明天早上也会尝试在其中添加一个“如果它是一个文件”
  • 好的,我创建了一个快速的 if 语句,代码现在看起来像这样 $dir = "./portfolio"; $files = scandir($dir); // returns array of files, sorted alphabetically foreach($files as $file) { if($file !== "." && $file !== ".."){ include("portfolio/".$file); } } 你觉得呢?这是个问题吗?
  • @ntgCleaner 在我看来没问题 :)
  • scandir 应该比opendir 消耗更多资源。
【解决方案2】:

这个归功于@SiGanteng

我只需要添加另一行以确保它只查看真实文件:下面的代码

$dir = "./portfolio"; 
$files = scandir($dir); // returns array of files, sorted alphabetically

foreach($files as $file) {
    if(is_file($dir.'/'.$file)) {
        include("portfolio/".$file);
    }
}

这是按升序返回结果的最简单方法。
再次感谢SiGanteng

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多