我的网站空间上有一个目录“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"},
]});
如果上述内容太难,标题当然可以重复文件名。
这有可能吗?
提前感谢您的帮助。
托马斯
答案 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。
希望有所帮助!
(我意识到这需要花费更多的精力,而不仅仅是写一小段代码,但至少你还需要做一些思考才能完成它。祝你好运!