原始数组
$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);