合并或连接两个多维数组并复制键/值

时间:2014-02-11 07:56:16

标签: php arrays multidimensional-array merge array-merge

如何合并两个不同的多维数组,但是将键和值从第一个数组复制到第二个数组?

我是如何努力让它发挥作用的;第一个数组设置输入字段,然后可以克隆(使用jQuery克隆,完全像这样:http://jsfiddle.net/8M98y/)。保存字段数据后,第二个数组就是结果输出。问题是,第二个数组缺少正确输出保存数据所需的第一个数组中的特定键和值。

在将键和值从第一个数组复制到第二个数组时,是否有办法连接或合并数组?

我需要复制键/值的第一个数组如下所示:

Array
(
    [group-1] => Array
        (
            [fields] => Array
                (
                    [text-field-1] => Array
                        (
                            [name] => Text Field 1
                            [value] => Value 1
                            [comments] => true
                        )

                    [text-field-2] => Array
                        (
                            [name] => Text Field 2
                            [value] =>  Value 2
                            [comments] => false
                        )

                )

        )

)

第二个数组如下所示:

Array
(
    [group-1] => Array
        (
            [fields] => Array
                (
                    [text-field-1] => New value here
                    [text-field-2] => New value also
                )

        )

    [group-2] => Array
        (
            [fields] => Array
                (
                    [text-field-1] => Cloned group with new value
                    [text-field-2] => Cloned group with new value also
                )

        )

)

因此,如果这两个数组能够合并,则需要合并数组的输出如下所示:http://pastebin.com/uzuZs73B

我尝试使用array_merge( $array2, $array1 ),但结果输出如下所示:http://pastebin.com/DucKGMN3它们实际上是合并的,但键和值不会被复制。

编辑:此处应描述用例。

这是如何工作的,初始的未保存输出是由第一个数组创建的组中的两个文本输入。该组是可克隆的,使用jQuery clone(此示例在此处: http://jsfiddle.net/8M98y/ )。因此,如果您添加/克隆一个或多个组然后保存,则生成的保存数据将是第二个数组。第二个数组中的字符串是实际保存的输入值。那些会在第一个数组中进入[value]。

但是,字段的输出仍然基于第一个数组,这意味着它无法正确输出克隆组,因为它们不是数组,并且没有来自第一个数组的相同键和值。

enter image description here

如果有人能够对此提供一些见解,那将非常感激。

1 个答案:

答案 0 :(得分:1)

很抱歉,如果我误解了这个问题,但是合并了一个要求?如果您可以访问这两个数组,则可以迭代第二个数组,映射原始键值,然后在使用新值时进行覆盖。

您的阵列:

$arr1 = Array
(
    'group-1' => Array
        (
            'fields' => Array
                (
                    'text-field-1' => Array
                        (
                            'name' => 'Text Field 1',
                            'value' => 'Value 1',
                            'comments' => 'true'
                        ),

                    'text-field-2' => Array
                        (
                            'name' => 'Text Field 2',
                            'value' =>  'Value 2',
                            'comments' => 'false'
                        )

                )

        )

);


$arr2 = Array
(
    'group-1' => Array
        (
            'fields' => Array
                (
                    'text-field-1' => 'New value here',
                    'text-field-2' => 'New value also'
                )

        ),

    'group-2' => Array
        (
            'fields' => Array
                (
                    'text-field-1' => 'Cloned group with new value',
                    'text-field-2' => 'Cloned group with new value also'
                )

        )

);

秘密酱:

foreach($arr2 as $k=>$v){
    // Get the new values for this iteration
    $val1 = $arr2[$k]['fields']['text-field-1'];
    $val2 = $arr2[$k]['fields']['text-field-2'];
    // Duplicate the original array
    $arr2[$k]['fields'] = $arr1['group-1']['fields']; 
    // Insert the new values
    $arr2[$k]['fields']['text-field-1']['value'] = $val1;
    $arr2[$k]['fields']['text-field-2']['value'] = $val2;
}


echo '<pre>';
print_r($arr2);
echo '</pre>';

exit();

返回:

Array
(
    [group-1] => Array
        (
            [fields] => Array
                (
                    [text-field-1] => Array
                        (
                            [name] => Text Field 1
                            [value] => New value here
                            [comments] => true
                        )

                    [text-field-2] => Array
                        (
                            [name] => Text Field 2
                            [value] => New value also
                            [comments] => false
                        )

                )

        )

    [group-2] => Array
        (
            [fields] => Array
                (
                    [text-field-1] => Array
                        (
                            [name] => Text Field 1
                            [value] => Cloned group with new value
                            [comments] => true
                        )

                    [text-field-2] => Array
                        (
                            [name] => Text Field 2
                            [value] => Cloned group with new value also
                            [comments] => false
                        )

                )

        )

)