PHP多维数组多条件合并

19 篇文章 0 订阅
13 篇文章 2 订阅

原始数组

$data = [
            0 => [
                "osid" => "51",
                "item" => [
                    0 => [
                        "id" => "242",
                        "name" => "固定式压力容器检验结论",
                        "num" => "1",
                        "muid" => [
                            0 => "6",
                            1 => "7",
                        ],
                        "sort" => 1,
                    ],
                    1 => [
                        "id" => "243",
                        "name" => "固定式压力容器资料审查报告",
                        "num" => "3",
                        "muid" => [
                            0 => "6",
                            1 => "7",
                        ],
                        "sort" => 2,
                    ],
                    2 => [
                        "id" => "244",
                        "name" => "固定式压力容器宏观检验报告",
                        "num" => "1",
                        "muid" => [
                            0 => "6",
                            1 => "7",
                        ],
                        "sort" => 3,
                    ],
                    3 => [
                        "id" => "245",
                        "name" => "壁厚测定报告",
                        "num" => "1",
                        "muid" => [
                            0 => "6",
                        ],
                        "sort" => 4,
                    ],
                    4 => [
                        "id" => "246",
                        "name" => "射线检测报告",
                        "num" => "1",
                        "muid" => [
                            0 => "6",
                        ],
                        "sort" => 5,
                    ],
                    5 => [
                        "id" => "247",
                        "name" => "超声波检测报告",
                        "num" => "1",
                        "muid" => [
                            0 => "6",
                        ],
                        "sort" => 6,
                    ]
                ],
            ],
            1 => [
                "osid" => "52",
                "item" => [
                    0 => [
                        "id" => "242",
                        "name" => "固定式压力容器检验结论",
                        "num" => "1",
                        "muid" => [
                            0 => "6",
                            1 => "7",
                        ],
                        "sort" => 1,
                    ],
                    1 => [
                        "id" => "243",
                        "name" => "固定式压力容器资料审查报告",
                        "num" => "3",
                        "muid" => [
                            0 => "6",
                            1 => "7",
                        ],
                        "sort" => 2,
                    ],
                ],
            ]
        ];

目标数组

$data = [
            'osid_51'=>[
                'osid'=>51,
                'item'=>[
                    'muid_6_7'=>[
                        'tids'=>'242,243,244',
                        'tnames'=>'固定式压力容器检验结论,固定式压力容器资料审查报告,固定式压力容器宏观检验报告',
                        'detail'=>[
                            242 => [
                                "id" => "242",
                                "name" => "固定式压力容器检验结论",
                                "num" => "1",
                                "muid" => [
                                    0 => "6",
                                    1 => "7",
                                ],
                                "sort" => 1,
                            ],
                            243 => [
                                "id" => "243",
                                "name" => "固定式压力容器资料审查报告",
                                "num" => "3",
                                "muid" => [
                                    0 => "6",
                                    1 => "7",
                                ],
                                "sort" => 2,
                            ],
                            244 => [
                                "id" => "244",
                                "name" => "固定式压力容器宏观检验报告",
                                "num" => "1",
                                "muid" => [
                                    0 => "6",
                                    1 => "7",
                                ],
                                "sort" => 3,
                            ]
                        ]
                    ],
                    'muid_6'=>[
                        'tids'=>'245,246,247',
                        'tnames'=>'壁厚测定报告,射线检测报告,超声波检测报告',
                        'detail'=>[
                            245 => [
                                "id" => "245",
                                "name" => "壁厚测定报告",
                                "num" => "1",
                                "muid" => [
                                    0 => "6",
                                ],
                                "sort" => 4,
                            ],
                            246 => [
                                "id" => "246",
                                "name" => "射线检测报告",
                                "num" => "1",
                                "muid" => [
                                    0 => "6",
                                ],
                                "sort" => 5,
                            ],
                            247 => [
                                "id" => "247",
                                "name" => "超声波检测报告",
                                "num" => "1",
                                "muid" => [
                                    0 => "6",
                                ],
                                "sort" => 6,
                            ]
                        ]
                    ],
                ]
            ],
            'osid_52'=>[
                'osid'=>52,
                'item'=>[
                    'muid_6_7'=>[
                        'tids'=>'242,243',
                        'tnames'=>'固定式压力容器检验结论,固定式压力容器资料审查报告',
                        'detail'=>[
                            242 => [
                                "id" => "242",
                                "name" => "固定式压力容器检验结论",
                                "num" => "1",
                                "muid" => [
                                    0 => "6",
                                    1 => "7",
                                ],
                                "sort" => 1,
                            ],
                            243 => [
                                "id" => "243",
                                "name" => "固定式压力容器资料审查报告",
                                "num" => "3",
                                "muid" => [
                                    0 => "6",
                                    1 => "7",
                                ],
                                "sort" => 2,
                            ]
                        ]
                    ]
                ]
            ],
        ];

实现步骤:

通过遍历原始数据数组$data,将每个元素转换为指定格式的新元素,并构建一个新的数据数组。

1、遍历$data数组中的每个元素,每个元素表示一个具体的对象(osid)。

2、对于每个对象,创建一个以osid_加上当前osid值作为键名的新元素。

3、在新元素中,存储当前对象的osid值。

4、在新元素中,创建一个空的item数组,用于存储该对象下的所有子项信息。

5、遍历当前对象的item数组中的每个子项。

6、对于每个子项,生成一个以muid_加上当前子项的muid数组中的值组合作为键名的新元素。

7、在新元素中,存储当前子项的id,并多次使用implode()函数将当前子项的id和name合并为一个字符串。

8、在新元素中,创建一个detail数组,用于存储当前子项的详细信息。

9、将当前子项的id作为键,将当前子项的完整信息存储到detail数组中。

10、在新元素中,存储完整的tid和tname字符串,以及包含详细信息的detail数组。

11、将新元素添加到新的数据数组$transformedData中,以正确的键名作为索引。

12、最后,方法返回转换后的数据数组$transformedData。

实现方式:

function transformData($data) {
    $transformedData = [];

    foreach ($data as $item) {
        $osid = 'osid_' . $item['osid'];
        $transformedItem = [
            'osid' => $item['osid'],
            'item' => []
        ];

        foreach ($item['item'] as $subItem) {
            $muid = 'muid_' . implode('_', $subItem['muid']);
            $tidArray = [];
            $tnameArray = [];
            $detailArray = [];

            foreach ($subItem['muid'] as $muidItem) {
                $tidArray[] = $subItem['id'];
                $tnameArray[] = $subItem['name'];
                $detailArray[$subItem['id']] = $subItem;
            }

            $transformedItem['item'][$muid] = [
                'tids' => implode(',', $tidArray),
                'tnames' => implode(',', $tnameArray),
                'detail' => $detailArray
            ];
        }

        $transformedData[$osid] = $transformedItem;
    }

    return $transformedData;
}

// 调用方法并输出结果

$transformedData = transformData($data);
var_dump($transformedData);

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upcto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值