繁体   English   中英

PHP 组 Json 对象

[英]PHP Group Json Objects

 "forms": [
            {
                "id": 1,
                "name": "new_patient",
                "deleted_at": null,
                "created_at": "2017-10-24 05:12:24",
                "updated_at": "2017-10-24 05:12:24",
                "pivot": {
                    "institution_id": 1,
                    "form_id": 1,
                    "field_name_id": 21,
                    "field_caption": "Gön.Hekim"
                }
            },
            {
                "id": 1,
                "name": "new_patient",
                "deleted_at": null,
                "created_at": "2017-10-24 05:12:24",
                "updated_at": "2017-10-24 05:12:24",
                "pivot": {
                    "institution_id": 1,
                    "form_id": 1,
                    "field_name_id": 22,
                    "field_caption": "Kurum"
                }
            },
            {
                "id": 1,
                "name": "new_patient",
                "deleted_at": null,
                "created_at": "2017-10-24 05:12:24",
                "updated_at": "2017-10-24 05:12:24",
                "pivot": {
                    "institution_id": 1,
                    "form_id": 1,
                    "field_name_id": 23,
                    "field_caption": "Endikasyon"
                }
            },
            {
                "id": 2,
                "name": "edit_patient",
                "deleted_at": null,
                "created_at": "2017-10-24 05:12:24",
                "updated_at": "2017-10-24 05:12:24",
                "pivot": {
                    "institution_id": 1,
                    "form_id": 2,
                    "field_name_id": 24,
                    "field_caption": "Materyal"
                }
            }
        ]

我想以相同的名称/ ID 对表单对象进行分组。

我多么想要...

"forms": [
                {
                    "id": 1,
                    "name": "new_patient",
                    "deleted_at": null,
                    "created_at": "2017-10-24 05:12:24",
                    "updated_at": "2017-10-24 05:12:24",
                    "fields": [{
                        "field_name_id": 21,
                        "field_caption": "Gön.Hekim"
                    },{
                        "field_name_id": 22,
                        "field_caption": "Kurum"
                    },{
                        "field_name_id": 23,
                        "field_caption": "Endikasyon"
                    }]
                },
                {
                    "id": 2,
                    "name": "edit_patient",
                    "deleted_at": null,
                    "created_at": "2017-10-24 05:12:24",
                    "updated_at": "2017-10-24 05:12:24",
                    "fields": [{
                        "field_name_id": 24,
                        "field_caption": "Materyal"
                    }]
                }
            ]

我在so中搜索并用谷歌搜索,但我找不到任何解决我问题的方法。 有类似问题的答案。

我用 foreach 循环做了,但我认为在 php 中可能有一个方法。

而且,如果我在 json 中有一百多个对象,foreach 可能会很慢。

谢谢指教。

请尝试以下操作:

$arr = json_decode($str, true);
$arr2 = [];
$ids = [];
foreach($arr['forms'] as $form)
{
    if(!in_array($form['id'], $ids))
    {
        $ids[] = $form['id'];
        $arr2[$form['id']] = $form;
    }
    unset($arr2[$form['id']]['pivot']);
    $arr2[$form['id']]['fields'][] = [$form['pivot']['field_name_id'], $form['pivot']['field_caption']];
}
$str2 = json_encode(['forms' => array_values($arr2)]);

echo $str2;

这使用foreach循环来获取唯一的表单,并将创建一个新的键fields来保存field_name_idfield_caption并删除pivot

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM