将一个多维数组附加到同一键上的另一个多维数组


append one multidimensional array to another multidimensional array on same key

我有两个数组

$input = Array
(
    [0] => Array
        (
            [section] => 725
            [location] => New Building - 26
            [rows] => DDD
            [seats] => DDD
        )
    [1] => Array
        (
            [section] => 721
            [location] => Helipad - II
            [rows] => R1,R2
            [seats] => S1,S2
        )
    [2] => Array
        (
            [section] => 724
            [location] => NDTV Times
            [rows] => R1,R2,R3
            [seats] => S1,S2,S3
        )
);

下面是第二个数组

$extra = Array
(
    [0] => dry||Obstacles Present||yes
    [1] => wet||Not Find||no
    [2] => icy||||yes
    [3] => 
)

和我需要所需的数组下面:

$output =Array
(
    [0] => Array
        (
            [section] => 725
            [location] => New Building - 26
            [rows] => DDD
            [seats] => DDD
            [conditions] => dry
            [obstacles] => Obstacles Present
            [normal_lighting] => yes
        )
    [1] => Array
        (
            [section] => 721
            [location] => Helipad - II
            [rows] => R1,R2
            [seats] => S1,S2
            [conditions] => wet
            [obstacles] => Not Find
            [normal_lighting] => no
        )
    [2] => Array
        (
            [section] => 724
            [location] => NDTV Times
            [rows] => R1,R2,R3
            [seats] => S1,S2,S3
            [conditions] => icy
            [obstacles] => 
            [normal_lighting] => yes
        )
)

我做了下面的顺序来得到想要的数组:

foreach($extra as $efk=>$efv)
{
    if(!empty($efv)) {
        $arr_field_value[] = explode("||", $efv);
    }
}
$arr_key = array('conditions','obstacles','normal_lighting');
foreach($arr_field_value as $fv)
{
    $arr_extra_field[]=array_combine($arr_key,$fv);
}
foreach($input as $k=>$v)
{   
    $output[]=array_merge($v,$arr_extra_field[$k]);
}
echo "<pre>"; print_r($output);

我知道这真的是一个漫长的过程,请给我建议任何聪明的方法。

你可以看到工作演示

谢谢。

foreach($extra as $key => $val){
    if($val !== ''){
        list($conditions, $obstacles, $normal_lighting) = explode('||', $val);
        $input[$key]['conditions'] = $conditions;
        $input[$key]['obstacles'] = $obstacles;
        $input[$key]['normal_lighting'] = $normal_lighting;
    }
}

我想你是在找array_merge_recursive()

foreach ($extra as $key => &$extra_elem) {
    if (!$extra_elem) {
        unset($extra[$key]);
        continue;
    }
    $extra_elem = array_combine(array(
        'conditions',
        'obstacles',
        'normal_lighting',
    ), explode('||', $extra_elem));
}
$desired = array_merge_recursive($input, $extra);