我有一个2D数组,我想生成一个格式化的数组。实际上我想通过格式化数组一次插入多行。
我的2D数组:
$occupied_ids = [
[8457, 6584],
[9874, 4586],
];
预期格式为:
Array
(
[0] => Array
(
[occupied_id] => 8457
[feed] => 2
[status] => 1
[status_date] => 2015-10-15
)
[1] => Array
(
[occupied_id] => 6584
[feed] => 2
[status] => 1
[status_date] => 2015-10-15
)
)
//and so on....
我通过以下方式格式化了我想要的结构:
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);
}
但我正在寻找一种没有循环的方法。任何建议将不胜感激。
答案 0 :(得分:1)
不确定它有多好,但我抓了它。午餐时间,但我会稍微重温一下,看看可以优化什么:
$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);
答案 1 :(得分:1)
使用array_reduce展平数组的第一级
$occupied_ids = [
[8457, 6584],
[9874, 4586],
];
function format_elem($v)
{
$feed = isset($_GET['feed']) ? $_GET['feed'] : 2;
return [
'occupied_id' => $v,
'feed' => $feed,
'status' => 1,
'status_date' => date('Y-m-d'),
];
}
$ids=array_reduce($occupied_ids,'array_merge',[]);
$attributes =array_map(format_elem,$ids);