代码之家  ›  专栏  ›  技术社区  ›  Ryan Palmer

合并或联接两个多维数组,并将键/值复制到

  •  2
  • Ryan Palmer  · 技术社区  · 10 年前

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

    我是如何让它发挥作用的;第一个数组设置输入字段,然后可以克隆(使用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 回复  |  直到 10 年前
        1
  •  1
  •   markBlack    10 年前

    对不起,如果我误解了这个问题,但合并是一个需求吗?如果您可以访问这两个数组,则可以遍历第二个数组,映射原始键值,并在执行过程中覆盖新值。

    您的阵列:

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