【问题标题】:Automatically create a json file which lists all images in a directory?自动创建一个列出目录中所有图像的 json 文件?
【发布时间】:2012-01-28 10:08:36
【问题描述】:

我的网站空间上有一个目录“文件”。此目录中为 png-images,可能会经常更改。

文件名需要存储在 json 文件中。

有没有办法自动创建一个json文件,通过以下方式列出目录中的所有图像:

art_showWindow({"art":[
{"href":"http://www.domain.example/files/art_noveau_1.png","title":"Art Noveau 1"},
{"href":"http://www.domain.example/files/art_noveau_5.png","title":"Art Noveau 5"},
{"href":"http://www.domain.example/files/art_noveau_23.png","title":"Art Noveau 23"},
]});

如果上面的内容太难,标题当然可以只是文件名的重复。

这有可能吗?

提前感谢您的帮助。

托马斯

【问题讨论】:

    标签: php json file


    【解决方案1】:

    据我所知,没有一个神奇的原生 PHP 函数可以做到这一点,尽管这并不令人非常惊讶。

    由于为您编写脚本不会帮助您学到很多东西,我认为最好指出一些工具来应对这一挑战。

    首先,你要找到一个目录下的所有PNG文件;要列出目录中的所有文件(和目录),请使用scandir($directory)。从那里开始,您可以使用 foreach 循环遍历返回的数组,并且只将 PNG 文件粘贴到新数组中。

    由于 scandir 的输出无法识别文件和目录,您可能需要在结果上运行 is_dir 以确保您只获取文件。

    然后您可以使用pathinfo 检索当前文件的扩展名和基本名称(不带扩展名的文件名,在 pathinfo 的输出中标记为“文件名”)。您将需要扩展来确定文件是否为 PNG(因此要添加到新数组中)。

    一旦您遍历了 scandir 数组并创建了一个带有 PNG 文件名的数组,您就可以开始构建您的最终数组了。您将要开始另一个foreach 循环,在该循环中,您将“http://www.domain.example/files/”添加到文件名中,并使用一些魔法将文件名转换为标题。您希望数组的结构如下:

    $art = array(    
        array(
            'href' => $full_url,
            'title' => $title
        ),
        array(
            'href' => $full_url,
            'title' => $title
        ),
        // etc
    );
    

    要获得标题,我会选择这个看似复杂的单行:

    $title = ucwords( // Give words an upper case first letter
        str_replace('_', ' ', //replace underscores by spaces
            substr($filename, 0, (strlen($filename) - 4) //strip .png extension
        )
    );
    

    foreach 循环完成后,您将拥有一个完全填充的艺术数组。要将其转换为 JSON,您只需使用 json_encode,如下所示:

    $output = json_encode(array('art' => $art));
    

    您提到要将其保存为 json 文件;你确定你不只是想让 PHP 输出 JSON 吗?

    无论哪种方式,保存文件都很简单,file_put_contents 将完成这项工作。

    如果您只想让 PHP 输出它,您需要将 Content-Type HTTP 标头设置为 application/json:header('Content-Type: application/json');,然后简单地回显 $output。

    希望有帮助!

    (而且我意识到这比仅仅给你写一段代码需要更多的努力,但至少你仍然需要做一些思考工作来完成它。祝你好运!

    【讨论】:

      猜你喜欢
      • 2011-04-16
      • 2012-09-02
      • 2013-06-21
      • 1970-01-01
      • 2015-07-04
      • 2011-07-31
      • 2013-11-13
      • 2013-03-24
      相关资源
      最近更新 更多