Json数组到对象多维

Posted

技术标签:

【中文标题】Json数组到对象多维【英文标题】:Json array to object multidimensional 【发布时间】:2018-12-18 05:14:49 【问题描述】:

目前的问题是我的 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” ]

我怎样才能做到这一点?

【问题讨论】:

你不能添加悬空逗号仍然是有效的 JSON,JSON 不支持这个。 【参考方案1】:

我猜这应该可行:

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

【讨论】:

如果标题不按顺序怎么办?假设我们有title1、title2、title1?那么$previousTitle 会起作用吗? 不,不会。您始终可以将 $previousTitle 切换为数组,然后在必要时在 if 语句中进行数组搜索。好电话!【参考方案2】:

Laravel 的集合可以让你这样做:

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

分解:

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

【讨论】:

哦,这很甜蜜,很好的电话 这个是为我做的。

以上是关于Json数组到对象多维的主要内容,如果未能解决你的问题,请参考以下文章

从数组和多维数组创建 JSON 对象

json 格式 多维数组

如何反序列化包含多维数组的json对象?

PHP生成多维数组的json格式

将多维表单数据序列化为 JSON 对象数组以使用 application/json

PHP json多维数组追加数组怎么写?