目前我使用三个独立的php函数来数组:
- 文件夹名称
- 文件夹下的缩略图
- 文件夹下的文本文件
分成三个独立的json文件,所以它们现在是:
["folder1","folder2","folder3"]
["folder1/thumb.svg","folder2/thumb.svg","folder3/thumb.svg"]
["blah blah blah","blah blah blah","blah blah blah"]
这对我来说很好,但如果我能把它们做成一个json文件,看起来会容易得多
[
{
"name" : "folder1",
"thumbnail" : "folder1/thumb.svg",
"text": "blah blah blah"
},
{
"name" : "folder2",
"thumbnail" : "folder2/thumb.svg",
"text": "blah blah blah"
},
{
"name" : "folder3",
"thumbnail" : "folder3/thumb.svg",
"text": "blah blah blah"
},
]
有办法做到吗?谢谢
解释更多:
例如,我尝试了array("name" => array_map("basename", glob('./folders/*', GLOB_ONLYDIR)),)
,它只是将我所有的文件夹作为一个巨大的数组放在一个"name"条目下,就像这个{"name":["folder1","folder2","folder3"]}
。
伪解决方案:
IkoTikashi提供了一个解决方案,虽然没有必要回答这个问题,但可能对一些人有用。我用他的想法建立了以下一些示例代码:
<?php
$checkfolder = './path/examples/folders';
$json = [];
foreach ( glob($checkfolder . '*', GLOB_ONLYDIR) as $folder)
{
$filename = $folder . "/description.txt";
if (file_exists($filename)) {
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
} else {
$contents = '';
}
$json[] = [
'name' => str_replace($checkfolder, '', $folder),
'thumb' => $folder . '/thumb.svg',
'text' => $contents
];
}
json_encode($json);
?>
当然,这个解决方案并不完美。首先,它没有为缩略图提供可用的url。更重要的是,它消除了原始代码的模块性——用户可以使用三个独立的api来根据需要生成特定的json。重新组织现有json文件的原因是,它们可以有一个额外的选项来生成组合数组。相反,这个解决方案创建了一个全新的功能来实现这一目标——因此,虽然它是一个临时解决方案,但它缺乏可升级性。
读取folders/
下的所有目录,并使用它们设置一个新数组:
<?php
$checkfolder = 'img/';
$json = [];
foreach ( glob($checkfolder . '*', GLOB_ONLYDIR) as $folder)
{
$folderName = str_replace($checkfolder, '', $folder);
$json[] = [
'name' => $folderName,
'thumbnail' => $folderName . '/thumb.svg',
'text' => 'blah blah blah'
];
}
print_r(json_encode($json));
在该循环中,您将进行文件存在性检查、读取文本等。
json通常是一个文本,因此,如果您想使脚本成为json数据源,您可以以该格式打印出来。
例如:
echo "{'n";
echo "{'n";
echo "'name':'$folderArr[0]''n";
echo "}'n";
echo "}'n";
但是,您必须确保脚本上不会发生任何其他文本打印输出,以避免JSON格式损坏。