2014-02-11 169 views
2

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

我是如何让它工作的;第一个数组设置输入字段,然后可以克隆(使用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),但结果输出看起来像th是:http://pastebin.com/DucKGMN3他们实际上合并,但键和值不复制。

编辑:应该在这里描述一个用例。

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

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

enter image description here

如果任何人都可以提供这方面的一些见解,这将是巨大的,并十分赞赏。

+0

什么是第二个数组中的字符串的含义是什么?它们是否对应于第一个数组中的某个特定键? – baldrs

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

       ) 

     ) 

)