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.
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);