2013-09-30 6 views
0

У меня есть два массива на 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 
} 
} 

Второй массив является деталь класса записей, и я хочу, чтобы они появились под каждым классом в первом массиве , Есть уловка. В этом втором массиве, если нет Департамента или Класса, ключ массива пуст (''). Отдел/класс всегда будет пустым, или оба будут содержать строку (так что никогда не будет случая, когда отдел пуст, но класс не пуст). Эти записи с пустым департаментом/классом во втором массиве должны быть связаны с записью в первом массиве, где Department = «None» и Class = «None».

Это пример второго массива:

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' 
    } 
+2

RTFM: http://php.net/manual/en/function.array-merge.php ... вы могли бы хотя бы попробовать, даже если это не ваше 100% -ное решение. Возможно, вам также понадобится foreach ... php.net/manual/en/control-structures.foreach.php – djot

+0

Для этого вы можете использовать функцию array_merge(). $ array3 = array_merge ($ array1, $ array2/*, $ arrayN, $ arrayN * /); – OBV

+0

Насколько я понимаю, мне, вероятно, понадобится array_merge. Моя проблема заключается в том, как перебирать массивы и проводить сравнение, чтобы слияние происходило правильно. В частности, я застрял в том, как использовать foreach, когда ключи массива являются строками. foreach ($ groups as $ k => $ r) { if ($ k == '') {echo 'blank';} foreach ($ r as $ item => $ v) { foreach ($ cl_subtotal as & $ inv1) { if ($ inv1 ==) // Как я могу ссылаться на $ inv1 здесь? Я чувствую, что мне нужен ключ, но это строка, которая не всегда совпадает с } –

ответ

0

Вот как я решил это: я первый заменил пустой ключи во втором массиве ($ 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; 
       } 
      } 
     } 

, чтобы объединить массив с деталями в сводный массив.

Смежные вопросы