在 PHP 中合并两个关联数组


Merge two associative arrays in PHP

我在PHP中有两个数组想要合并。 第一个数组的示例,它是部门和类的列表,以及类总数:

vdump($cl_subtotal);
array(2) {
 'None' → array(1) {
 'None' → float 132.88
}
'instore bakery' → array(10) {
  'pies' → float 70.94
  'cakes' → float 146.71
  'miscellaneous' → float 25.57
  'cookies' → float 52.38
  'brownies' → float 33.96
  'rolls' → float 143.02
  'danish' → float 90.42
  'bagels & pretzels' → float 85.68
  'breads' → float 55.73
  'dessert case' → float 81.83
 }
}

第二个数组是类详细信息记录,我希望它们出现在第一个数组中的每个类下。 有一个问题。 在第二个数组中,如果没有部门或类,则数组键为空 ('')。 部门/类将始终为空,或者它们都包含一个字符串(因此永远不会出现部门为空但类不为空的情况)。 第二个数组中具有空白部门/类的这些记录应与第一个数组中的记录相关联,其中部门 = "无"和类 = "无"。

这是第二个数组的示例:

 vdump($groups);
 array(2) {
 'instore bakery' → array(10) {
   'pies' → array(2) {
     [0] => array(12) {
    'UPC' → str•13 '0004712503209'
    'Department_Desc' → str•14 'instore bakery'
    'Class_Desc' → str•4 'pies'
    'store' → str•2 '11'
    'supplier_number' → str•4 '6303'
    'invoice_number' → str•11 'DI613728199'
    'seq' → str•1 '1'
    'item_id' → str•14 '00047125032097'
    'item_description' → str•9 'MARIONBRY'
    'dept_number' → str•2 '17'
    'final_qty' → str•4 '5.00'
    'final_cost' → str•5 '37.65'
  }

下面是一个带有空白部门/类的示例记录:

     [""] => array(1) {
       [""] => array(4) {
        [0] => array(10) {
        'store' → str•2 '11'
        'supplier_number' → str•4 '6303'
        'invoice_number' → str•11 'DI613728199'
        'seq' → str•1 '8'
        'item_id' → str•14 '00047125032332'
        'UPC' → str•13 '0004712503233'
        'item_description' → str•9 'NOT FOUND'
        'dept_number' → str•1 '0'
       'final_qty' → str•4 '2.00'
        'final_cost' → str•5 '20.96'
     }

这是我解决这个问题的方法:我首先替换了第二个数组 ($groups) 中的空键。 然后我做了:

            foreach($cl_subtotal as $grname => &$itemlist ){
            foreach($itemlist as $ilk => &$ilv){
                $ilv = array(
                    'value' => $ilv,
                );
                foreach($groups[$grname][$ilk] as $k => $v) {
                    $ilv[$k] = $v;
                }
            }
        }

将包含详细信息的数组合并到汇总数组中。