首页 > 解决方案 > Json数组到对象多维

问题描述

手头的问题是,在我解码后,我的 JSON 中有一个数组。

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

要放入数组的数据:

    [ 0 =>
        [ 0 => [
            '标题' => '标题 1',
            '文件' => [
                '名称' => '文件名',
                'url' => 'file_url'
            ]
        ]
        ],
        [ 1 => [
            '标题' => '标题 1',
            '文件' => [
                '名称' => '文件名',
                'url' => 'file_url'
            ]
        ]
        ],
        [ 2 => [
            '标题' => '标题 3',
            '文件' => [
                '名称' => '文件名',
                'url' => 'file_url'
            ]
        ]
        ],
        [ 3 => [
            '标题' => '标题 4',
            '文件' => [
                '名称' => '文件名',
                'url' => 'file_url'
            ]
        ]
        ]
    ]

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

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

然后我将其转换为 JSON:

json_encode(dataArray);

结果是:

    {
      “数据信息”:[
        {
            "title": "标题 1",
          “文件”:{
            "name": "文件名",
            “url”:“file_url”
          }
        },
        {
            "title": "标题 1",
          “文件”:{
            "name": "文件名",
            “url”:“file_url”
          }
        },
        {
            "title": "标题 3",
          “文件”:{
            "name": "文件名",
            “url”:“file_url”
          }
        },
        {
            "title": "标题 4",
          “文件”:{
            "name": "文件名",
            “url”:“file_url”
          }
        }
      ]
    }

我想要的是:

    {
        “数据信息”:[
        {
            "title": "标题 1",
          “文件”:{
            "name": "文件名",
            "url": "file_url",
          },
          {
            "name": "文件名",
            "url": "file_url",
          }
        },
        {
            "title": "标题 3",
          “文件”:{
            "name": "文件名",
            “url”:“file_url”
          }
        },
        {
            "title": "标题 4",
          “文件”:{
            "name": "文件名",
            “url”:“file_url”
          }
        }
      ]
    }

我怎样才能做到这一点?

标签: phparraysjsonlaravel

解决方案


我猜这应该可行:

$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'];
}

推荐阅读