当前位置: 首页 > 知识库问答 >
问题:

json数组到对象多维

龙星渊
2023-03-14

目前的问题是,在解码JSON后,JSON中有一个数组。

我从数据库中收集了一些项目,并将它们放在foreach中的一个数组中。

要放置在数组中的数据:


    [ 0 =>
        [ 0 => [
            'title' => 'Title 1',
            'files' => [
                'name' => 'file_name',
                'url' => 'file_url'
            ]
        ]
        ],
        [ 1 => [
            'title' => 'Title 1',
            'files' => [
                'name' => 'file_name',
                'url' => 'file_url'
            ]
        ]
        ],
        [ 2 => [
            'title' => 'Title 3',
            'files' => [
                'name' => 'file_name',
                'url' => 'file_url'
            ]
        ]
        ],
        [ 3 => [
            'title' => 'Title 4',
            'files' => [
                'name' => 'file_name',
                'url' => 'file_url'
            ]
        ]
        ]
    ]

接下来,我将把它放在一个数组中,以放置属于同一标题的所有文件


    $dataArray = [];
    foreach ($array as $key => $value) {
        $dataArray['dataInfo'][] = [
            'title' => $value['title'],
            'files' => [
                'name' => $value['files']['name'],
                'url' => $value['files']['url']
            ]
        ];
    }

然后,我将使用以下命令将其转换为JSON:

json_encode(dataArray);

结果是:


    {
      "dataInfo": [
        {
            "title": "Title 1",
          "files": {
            "name": "file name",
            "url": "file_url"
          }
        },
        {
            "title": "Title 1",
          "files": {
            "name": "file name",
            "url": "file_url"
          }
        },
        {
            "title": "Title 3",
          "files": {
            "name": "file name",
            "url": "file_url"
          }
        },
        {
            "title": "Title 4",
          "files": {
            "name": "file name",
            "url": "file_url"
          }
        }
      ]
    }

我想要的是:


    {
        "dataInfo": [
        {
            "title": "Title 1",
          "files": {
            "name": "file name",
            "url": "file_url",
          }, 
          {
            "name": "file name",
            "url": "file_url",
          }
        },
        {
            "title": "Title 3",
          "files": {
            "name": "file name",
            "url": "file_url"
          }
        },
        {
            "title": "Title 4",
          "files": {
            "name": "file name",
            "url": "file_url"
          }
        }
      ]
    }

我怎样才能做到这一点?

共有2个答案

公良英资
2023-03-14

Laravel的系列将允许您这样做:

$result = [ "dataInfo" => 
    collect($dataArray["dataInfo"])
        ->groupBy('title')
        ->map(function ($group, $title) {                    
        return [
            "title" => $title,
            "files" => $group->pluck("files")->all()
        ];
    })
];

分解如下:

首先转换$dataArray[“dataInfo”],方法是将其设置为集合,然后按“title”对其进行分组。然后将每个组转换为一个带有标题的条目和一个文件数组。

裴威
2023-03-14

我想这应该行得通:

$dataArray = [];
$previousTitle = '';
foreach ($array as $key => $value) {
    if ($previousTitle === $value['title']) {
        $dataArray['dataInfo'][$previousTitle]['files'] += [
            'name' => $value['files']['name'],
            'url' => $value['files']['url']
        ]
    } else {
        $dataArray['dataInfo'][] = [
            'title' => $value['title'],
            'files' => [
                'name' => $value['files']['name'],
                'url' => $value['files']['url']
            ]
        ];
    }

    $previousTitle = $value['title'];
}
 类似资料:
  • 问题内容: 我需要将PHP数组转换为json,但我没有得到我期望的结果。我希望它是一个可以轻松使用数字索引导航的对象。这是一个示例代码: 这就是我得到的 但是我想得到一个对象而不是数组: 谢谢 :) 问题答案: 你想。 顾名思义,该标志将json输出强制为一个对象,即使通常将其表示为数组也是如此。 您还可以删除一些更简洁的代码:

  • 问题内容: 我需要解析一个看起来像这样的json文件: 我想将这些X坐标和Y坐标放入JavaObject Click中,该类如下所示: 我看过gson是因为他们说这很容易,但是我不知道如何从文件中做到这一点。 问题答案: 假设您的json字符串数据存储在名为的变量中:

  • 我有一个pyspark dataframe,其中一列的格式如下: [{key1:value1},{key2:value2},{key3:value3},{key4:value4}] 让我们把它说成下面的专栏: 我希望将其转换为dataframe的列,其中列名为keyX,其内容为valueX,其中x=[1,4],如下所示: 我试过一些解决办法,但都不起作用。请求你分享任何想法或解决方案,如果你有。提

  • 我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果

  • 问题内容: 我需要用车把一个json对象数组模板化:(通过chrome控制台)[object,object,object,object]其中每个对象都由以下属性组成:名称,姓氏,ecc。 我知道不可能将对象数组放在车把中,但是我们必须创建具有数组所有对象的all属性的唯一对象。谁能建议我一个函数来创建它 问题答案: 您可以在调用模板时将数组设置为包装对象的属性。 例如,以作为持有财产 并且您的模板

  • 问题内容: 我试图从JSON数组中获取每个JSON对象。我通过HTTP发布获得此数据。 我知道我的数据是什么样的: 我的示例代码和结构如下所示: 我不确定如何遍历JSON数组并获取JSON对象,然后仅使用JSON对象。 问题答案: 试试这个作为您的结构, 您的名称不正确,顶层名称也不正确。解码为a之后,您可以遍历切片以获取每个切片