将多维数组合并为一个单一数组

3

很抱歉标题可能不够清晰。我有以下已调试的数组:

Array
(
    [output] => Array
        (
            [0] => Array
                (
                    [item] => Gear 2 (1PA-1111-00)
                    [item_number] => 1PA-1111-00
                    [item_id] => 227
                    [routes] => Array
                        (
                            [227-DELIVERY] => Array
                                (
                                    [line_name] => Distribution
                                    [pid] => 48
                                    [rid] => 605
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => + 1PA-E5514-00
                                    [selected_capacity] => 1500
                                    [capacity] => 1500
                                    [capacity_ot2] => 0
                                    [capacity_ot4] => 0
                                    [dates] => Array
                                        (
                                            [2015-12-15] => 1200
                                        )

                                )

                            [227-Inspection] => Array
                                (
                                    [line_name] => QC
                                    [pid] => 35
                                    [rid] => 606
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 1500
                                    [capacity] => 1500
                                    [capacity_ot2] => 0
                                    [capacity_ot4] => 0
                                    [dates] => Array
                                        (
                                            [2015-12-14] => 1200
                                        )

                                )

                            [227-N/C Finishing ] => Array
                                (
                                    [line_name] => Line 33
                                    [pid] => 29
                                    [rid] => 607
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 2793
                                    [capacity] => 2793
                                    [capacity_ot2] => 3142
                                    [capacity_ot4] => 3491
                                    [dates] => Array
                                        (
                                            [2015-12-11] => 1200
                                        )

                                )

                            [227-Heat Treatment] => Array
                                (
                                    [line_name] => Line 32
                                    [pid] => 26
                                    [rid] => 608
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 1024
                                    [capacity] => 1024
                                    [capacity_ot2] => 0
                                    [capacity_ot4] => 0
                                    [dates] => Array
                                        (
                                            [2015-12-08] => 1024
                                            [2015-12-07] => 1024
                                        )

                                )

                            [227-Hobbing] => Array
                                (
                                    [line_name] => Line 12
                                    [pid] => 5
                                    [rid] => 609
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 4352
                                    [capacity] => 4352
                                    [capacity_ot2] => 4896
                                    [capacity_ot4] => 5440
                                    [dates] => Array
                                        (
                                            [2015-12-04] => 2048
                                        )

                                )

                            [227-Shaper] => Array
                                (
                                    [line_name] => Line 12
                                    [pid] => 9
                                    [rid] => 610
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 2591
                                    [capacity] => 2591
                                    [capacity_ot2] => 2915
                                    [capacity_ot4] => 3239
                                    [dates] => Array
                                        (
                                            [2015-12-03] => 2048
                                        )

                                )

                            [227-Incoming] => Array
                                (
                                    [line_name] => QC
                                    [pid] => 38
                                    [rid] => 611
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 500
                                    [capacity] => 500
                                    [capacity_ot2] => 562
                                    [capacity_ot4] => 624
                                    [dates] => Array
                                        (
                                            [2015-12-01] => 500
                                            [2015-11-30] => 500
                                            [2015-11-27] => 500
                                            [2015-11-26] => 500
                                            [2015-11-25] => 500
                                        )

                                )

                            [227-LATHE MATERIAL] => Array
                                (
                                    [line_name] => Outsource
                                    [pid] => 50
                                    [rid] => 612
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 500
                                    [capacity] => 500
                                    [capacity_ot2] => 2915
                                    [capacity_ot4] => 3239
                                    [dates] => Array
                                        (
                                            [2015-12-01] => 500
                                            [2015-11-30] => 500
                                            [2015-11-27] => 500
                                            [2015-11-26] => 500
                                            [2015-11-25] => 500
                                        )

                                )

                            [227-FORGING MATERIAL] => Array
                                (
                                    [line_name] => Outsource
                                    [pid] => 52
                                    [rid] => 613
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 500
                                    [capacity] => 500
                                    [capacity_ot2] => 2915
                                    [capacity_ot4] => 3239
                                    [dates] => Array
                                        (
                                            [2015-12-01] => 500
                                            [2015-11-30] => 500
                                            [2015-11-27] => 500
                                            [2015-11-26] => 500
                                            [2015-11-25] => 500
                                        )

                                )

                        )

                    [dates] => Array
                        (
                            [0] => Array
                                (
                                    [delivery_date] => 2015-12-18
                                    [qty] => 1000
                                )

                            [1] => Array
                                (
                                    [delivery_date] => 2015-12-21
                                    [qty] => 200
                                )

                        )

                )

            [1] => Array
                (
                    [item] => Gear 2 (1PA-1111-00)
                    [item_number] => 1PA-1111-00
                    [item_id] => 227
                    [routes] => Array
                        (
                            [227-DELIVERY] => Array
                                (
                                    [line_name] => Distribution
                                    [pid] => 48
                                    [rid] => 605
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => + 1PA-E5514-00
                                    [selected_capacity] => 1500
                                    [capacity] => 1500
                                    [capacity_ot2] => 0
                                    [capacity_ot4] => 0
                                    [dates] => Array
                                        (
                                            [2015-12-16] => 1200
                                        )

                                )

                            [227-Inspection] => Array
                                (
                                    [line_name] => QC
                                    [pid] => 35
                                    [rid] => 606
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 1500
                                    [capacity] => 1500
                                    [capacity_ot2] => 0
                                    [capacity_ot4] => 0
                                    [dates] => Array
                                        (
                                            [2015-12-15] => 1200
                                        )

                                )

                            [227-N/C Finishing ] => Array
                                (
                                    [line_name] => Line 33
                                    [pid] => 29
                                    [rid] => 607
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 2793
                                    [capacity] => 2793
                                    [capacity_ot2] => 3142
                                    [capacity_ot4] => 3491
                                    [dates] => Array
                                        (
                                            [2015-12-14] => 1200
                                        )

                                )

                            [227-Heat Treatment] => Array
                                (
                                    [line_name] => Line 32
                                    [pid] => 26
                                    [rid] => 608
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 1024
                                    [capacity] => 1024
                                    [capacity_ot2] => 0
                                    [capacity_ot4] => 0
                                    [dates] => Array
                                        (
                                            [2015-12-11] => 1024
                                            [2015-12-10] => 1024
                                        )

                                )

                            [227-Hobbing] => Array
                                (
                                    [line_name] => Line 12
                                    [pid] => 5
                                    [rid] => 609
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 4352
                                    [capacity] => 4352
                                    [capacity_ot2] => 4896
                                    [capacity_ot4] => 5440
                                    [dates] => Array
                                        (
                                            [2015-12-09] => 2048
                                        )

                                )

                            [227-Shaper] => Array
                                (
                                    [line_name] => Line 12
                                    [pid] => 9
                                    [rid] => 610
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 2591
                                    [capacity] => 2591
                                    [capacity_ot2] => 2915
                                    [capacity_ot4] => 3239
                                    [dates] => Array
                                        (
                                            [2015-12-08] => 2048
                                        )

                                )

                            [227-Incoming] => Array
                                (
                                    [line_name] => QC
                                    [pid] => 38
                                    [rid] => 611
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 500
                                    [capacity] => 500
                                    [capacity_ot2] => 562
                                    [capacity_ot4] => 624
                                    [dates] => Array
                                        (
                                            [2015-12-04] => 500
                                            [2015-12-03] => 500
                                            [2015-12-02] => 500
                                            [2015-12-01] => 500
                                            [2015-11-30] => 500
                                        )

                                )

                            [227-LATHE MATERIAL] => Array
                                (
                                    [line_name] => Outsource
                                    [pid] => 50
                                    [rid] => 612
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 500
                                    [capacity] => 500
                                    [capacity_ot2] => 2915
                                    [capacity_ot4] => 3239
                                    [dates] => Array
                                        (
                                            [2015-12-04] => 500
                                            [2015-12-03] => 500
                                            [2015-12-02] => 500
                                            [2015-12-01] => 500
                                            [2015-11-30] => 500
                                        )

                                )

                            [227-FORGING MATERIAL] => Array
                                (
                                    [line_name] => Outsource
                                    [pid] => 52
                                    [rid] => 613
                                    [level] => 1
                                    [item_id] => 227
                                    [subpart_id] => 227
                                    [subpart_name] => 
                                    [selected_capacity] => 500
                                    [capacity] => 500
                                    [capacity_ot2] => 2915
                                    [capacity_ot4] => 3239
                                    [dates] => Array
                                        (
                                            [2015-12-04] => 500
                                            [2015-12-03] => 500
                                            [2015-12-02] => 500
                                            [2015-12-01] => 500
                                            [2015-11-30] => 500
                                        )

                                )

                        )

                    [dates] => Array
                        (
                            [0] => Array
                                (
                                    [delivery_date] => 2015-12-18
                                    [qty] => 1000
                                )

                            [1] => Array
                                (
                                    [delivery_date] => 2015-12-21
                                    [qty] => 200
                                )

                        )

                )

        )

    [min_date] => 2015-11-25
    [max_date] => 2015-12-21
)

正如您所看到的,两个数组元素除了$routes[ROUTE_NAME][dates]中的日期外,其他完全相同,我希望将那些值合并成一个值,这样就只有一个值,当然除了日期不同。
例如,ROUTE_NAME(如227-DELIVERY)的输出。
[227-DELIVERY] => Array
(
    [line_name] => Distribution
    [pid] => 48
    [rid] => 605
    [level] => 1
    [item_id] => 227
    [subpart_id] => 227
    [subpart_name] => + 1PA-E5514-00
    [selected_capacity] => 1500
    [capacity] => 1500
    [capacity_ot2] => 0
    [capacity_ot4] => 0
    [dates] => Array
        (
            [2015-12-15] => 1200
            [2015-12-16] => 1200
        )

)

是否有内置的PHP函数可以实现这个功能?我认为array_merge_recursive无法实现此功能。


你可以尝试类似的方法:https://dev59.com/Gmw15IYBdhLWcg3wLIo2 - Scream
1个回答

0

array_merge_recursive 在这种情况下可能会很麻烦,但是简单的 array_merge 结合 foreach 就可以解决。这将创建一个新的数组 $result,其中包含合并的数据:

$result = array();
foreach($array['output'][0]['routes'] as $key => $route){
    $route['dates'] = array_merge($route['dates'], $array['output'][1]['routes'][$key]['dates']);
    $result[$key] = $route;
}

print_r($result);

如果你想把所有东西放到同一个数组中,可以这样做:

foreach($array['output'][0]['routes'] as $key => &$route){
    $route['dates'] = array_merge($route['dates'], $array['output'][1]['routes'][$key]['dates']);
}

print_r($array['output'][0]['routes']);

在foreach循环中注意&,它基本上告诉我们修改正在遍历的现有数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接