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

时间:2011-08-05 06:46:10

标签: php multidimensional-array

我有两个阵列

$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] => 
)

我需要下面的Desired数组:

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

我知道这真是一个漫长的道路,请建议我采取任何明智的方式。

您可以看到 WORKING DEMO

感谢。

2 个答案:

答案 0 :(得分:3)

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;
    }
}

答案 1 :(得分:0)

我认为您正在寻找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);