Search code examples
phparrayspopulatearray-map

Populate 2D array from each value in an array of arrays


I have a 2D array and I want to generate a formatted array. Actually I want to genetate multiple rows at a time by restructuring the input array.

My 2D array:

$occupied_ids = [
    [8457, 6584],
    [9874, 4586],
];

Expected output:

array (
  0 => 
  array (
    'occupied_id' => 8457,
    'feed' => 2,
    'status' => 1,
    'status_date' => '2022-09-13',
  ),
  1 => 
  array (
    'occupied_id' => 6584,
    'feed' => 2,
    'status' => 1,
    'status_date' => '2022-09-13',
  ),
  2 => 
  array (
    'occupied_id' => 9874,
    'feed' => 2,
    'status' => 1,
    'status_date' => '2022-09-13',
  ),
  3 => 
  array (
    'occupied_id' => 4586,
    'feed' => 2,
    'status' => 1,
    'status_date' => '2022-09-13',
  ),
)

My working code:

foreach($occupied_ids as $ele){
    $attributes = array_map(function($v){
        $feed = isset($_GET['feed']) ? $_GET['feed'] : 2;
        $status = 1;
        return [
            'occupied_id'   =>  $v,
            'feed'          =>  $feed,
            'status'        =>  $status,
            'status_date'   =>  date('Y-m-d'),
       ];
    }, $ele);

    /*Call function to multi-insert*/
    //multi_insert($attributes);
}

But I'm looking for something a way without the outer loop.


Solution

  • Not sure how much better it is but I took a stab at it. Off to lunch but I'll revisit in a bit to see what can be optimized:

    $occupied_ids = call_user_func_array('array_merge', $occupied_ids);
    
    $temp = [   'feed'          =>  isset($_GET['feed']) ? $_GET['feed'] : 2,
                'status'        =>  1,
                'status_date'   =>  date('Y-m-d'),
           ];
    
    $attributes = array_map(function($v) use($temp) {
                                $r = $temp;
                                $r['occupied_id'] = $v;
                                return $r;
                            },
                            $occupied_ids);