如何重新组织json数组,并为每个键提供密钥字符串,同时通过php将它们排列成数组中的数组


How could I reorganize json arrays and give key string to each key while arraying them into arrays within an array through php?

目前我使用三个独立的php函数来数组:

  1. 文件夹名称
  2. 文件夹下的缩略图
  3. 文件夹下的文本文件

分成三个独立的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格式损坏。