在PHP

时间:2015-10-15 15:31:05

标签: php arrays

我有一个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);
}

但我正在寻找一种没有循环的方法。任何建议将不胜感激。

2 个答案:

答案 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);