自动创建一个列出目录中所有图像的json文件?

时间:2012-01-28 10:08:37

标签: php json file

我的网站空间上有一个目录“files”。在这个目录中是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"},
]});

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

这有可能吗?

提前感谢您的帮助。

托马斯

1 个答案:

答案 0 :(得分:1)

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

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

首先,您要查找目录中的所有PNG文件;要列出目录中的所有文件(和目录),请使用scandir($directory)。从那以后,您可以使用foreach循环迭代返回的数组,并仅将PNG文件粘贴到新数组中。

由于scandir的输出不会使文件和目录可识别,因此您可能希望对结果运行is_dir以确保只获取文件。

然后,您可以使用pathinfo检索当前文件的扩展名和基本名称(没有扩展名的文件名,在pathinfo的输出中标记为'filename')。您将需要扩展来确定该文件是否为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。

希望有所帮助!

(我意识到这需要花费更多的精力,而不仅仅是写一小段代码,但至少你还需要做一些思考才能完成它。祝你好运!