phparraysechoarray-mergevar-dump

php how do i merge 2 multidimensional arrays?


I've got two arrays. columns and tableInfo. I want to merge them together, but when I try to do that with array_merge I get these results when I var_dump it:

array (size=67)
  0 => string 'receive_date' (length=12)
  1 => string 'day' (length=3)
  2 => string 'main_category' (length=13)
  3 => string 'brand' (length=5)
  4 => string 'first_to_receive_qty' (length=20)
  5 => string 'purchase_value' (length=14)
  6 => 
    array (size=6)
      0 => string '2021-11-09' (length=10)
      1 => string 'Tuesday' (length=7)
      2 => string 'apparel' (length=7)
      3 => string 'adidas' (length=6)
      4 => string '3184' (length=4)
      5 => string '34773.31' (length=8)
  7 => 
    array (size=6)
      0 => string '2021-11-09' (length=10)
      1 => string 'Tuesday' (length=7)
      2 => string 'apparel' (length=7)
      3 => string 'nike' (length=4)
      4 => string '642' (length=3)
      5 => string '5089.50' (length=7)
  8 => 
    array (size=6)
      0 => string '2021-11-09' (length=10)
      1 => string 'Tuesday' (length=7)
      2 => string 'apparel' (length=7)
      3 => string 'puma' (length=4)
      4 => string '15' (length=2)
      5 => string '120.00' (length=6)

but i want the array var_dump to look like:

array (size=726)
0 =>
  array (size=6)
    'receive_date' => string '2021-11-09' (length=10)
    'day' => string 'tuesday' (length=7)
    'main_category' => string 'apparel' (length=7)
    'brand' => string 'adidas' (length=6)
    'first_to_receive_qty' => string '3184' (length=4)
    'purchase_value' => string '34773.31' (length=8) 
1 =>
  array (size=6)
    'receive_date' => string '2021-11-09' (length=10)
    'day' => string 'tuesday' (length=7)
    'main_category' => string 'apparel' (length=7)
    'brand' => string 'nike' (length=4)
    'first_to_receive_qty' => string '642' (length=3)
    'purchase_value' => string '5089.50' (length=7)
2 =>
  array (size=6)
    'receive_date' => string '2021-11-09' (length=10)
    'day' => string 'tuesday' (length=7)
    'main_category' => string 'apparel' (length=7)
    'brand' => string 'puma' (length=4)
    'first_to_receive_qty' => string '15' (length=2)
    'purchase_value' => string '120.00' (length=6)
 

I've tried a couple of things but i just can't seem to figure out how I merge them into an array that looks like this. Can somebody tell me how I gotta do it?


Solution

  • You want to combine not merge. To get a new array:

    $result = array_map(function($v) use($columns) {
                            return array_combine($columns, $v);
                        }, $tableinfo);
    

    Or simply loop and combine:

    foreach($tableinfo as $row) {
        $result[] = array_combine($columns, $row);
    }
    

    Or to modify $tableinfo:

    array_walk(function(&$v) use($columns) {
                   $v = array_combine($columns, $v);
               }, $tableinfo);
    

    Or with the loop:

    foreach($tableinfo as &$row) {
        $row = array_combine($columns, $row);
    }