将文件结构读入数组,但只能读取特定文件

时间:2011-01-11 18:40:35

标签: php arrays search file-io

我有一个如下所示的目录结构:

/expandables 
- folder
- folder
- folder
- folder 
  - BannerInfo.txt
  - index.html

folder中的每一个都具有相同的结构。一个名为BannerInfo.txtindex.html的文件。如果重要的话,大约有250个这样的文件夹。

我想遍历这些文件夹并将每个index.html文件存储到一个数组中。 index.html文件的内部只是一些简单的HTML和Javascript,我想将其读入一个字符串中以便稍后显示。

我在如何过滤掉各个文件夹中的index.html文件方面一直在努力。

这样做的目的是因为我想随机选择一个index.html文件并将内容放入textarea。我以为我可以在返回的数组上做一个简单的array_rand()并吐出字符串。

有什么想法吗?

编辑:

我想出了类似的东西:

<?

    $expandables = array();

    $expandables = scandir("expandables/");

    $count = 0;

    foreach($expandables as $expandable) {
        if ($expandable != "." && $expandable != "..") {
            $expandableCode = "expandables/" . $expandable . "/index.html";

            // get value of index.html for select list
            $expandableValue = file_get_contents($expandableCode);


            // echo out options
            echo "<option value='$expandableValue'>$expandable</option>";

        }
    }       



?>

但这并不完全正常。有没有办法在我从选择框中选择index.html内容后用index.html内容动态填充我的textarea?

1 个答案:

答案 0 :(得分:1)

您可以使用readdir()scandir()获取每个目录的内容(即文件名)。使用is_dir()检查找到的项目是文件还是目录。如果是目录,请在该目录上重复该过程。如果是文件,请检查它是否为“index.html”,如果是,请将其放入数组中。

最好将文件名(包括路径)存储在数组中而不是内容中。执行后者将导致每个请求都读取所有250个文件。

遍历目录可能有问题,因此最好也缓存此列表。

您可以将路径数组保存到文件中。然后,您可以在数组中加载此文件,这比检查所有这些目录更快。如果该文件不存在,您可以运行该过程来创建它。如果它确实存在,您可以检查它是否比某天(或任何最适合您的)更旧。如果任何index.html文件不存在,您还可以运行创建文件的过程,因为它显然不再是最新的。

如果将此数组保存为PHP代码,则可以包含它。如果您有像APC这样的PHP缓存,这将为您提供更好的性能。