php - 递归添加元素到数组

标签 php arrays merge

我需要合并这两个数组($array1 中的$array2):

$array1 = array(
    'data' => array(
        array(
            'raw' => array(
                'key1' => array('value1', 'value1_1'),
                'key3' => 'value3',
            ),
        ),
        array(
            'raw' => array(
                'key1' => array('value10', 'value10_1'),
                'key3' => 'value30',
            ),
        ),
        ...
    ),
);

$array2 = array(
    'data' => array(
       array(
           'raw' => array(
               'key1' => 'value1_2',
               'key2' => 'value2',
           )
       )
    )
);

预期结果:

array(
    'data' => array(
        array(
            'raw' => array(
                'key1' => array('value1', 'value1_1', 'value1_2'),
                'key2' => 'value2',
                'key3' => 'value3',
            ),
        ),
        array(
            'raw' => array(
                'key1' => array('value10', 'value10_1'),
                'key3' => 'value30',
            ),
        ),
    ),
);

当我使用 array_merge_recursive 时将 $array2 合并到 $array1['data'][0] 中,我得到了以下结果:

$array1 = array(
    'data' => array(
        array(
            'raw' => array(
                'key1' => array('value1', 'value1_1'),
                'key3' => 'value3',
            ),
        ),
        array(
            'raw' => array(
                'key1' => array('value10', 'value10_1'),
                'key3' => 'value30',
            ),
        ),
        array(
           'raw' => array(
               'key1' => 'value1_2',
               'key2' => 'value2',
           )
       )
    ),
);

当我使用 array_replace_recursive 时,我得到了以下结果:

$array1 = array(
    'data' => array(
        array(
            'raw' => array(
                'key1' => 'value1_2',
                'key2' => 'value2',
                'key3' => 'value3',
            ),
        ),
        array(
            'raw' => array(
                'key1' => array('value10', 'value10_1'),
                'key3' => 'value30',
            ),
        ),
    ),
);

我正在寻找获得预期结果的最简单方法。 数组可以有一个未知的 deph 数据结构,它可以有一个以上的索引子数组。看来我需要 array_merge_recursivearray_replace_recursive

之间的组合

非常感谢您的回答:)

最佳答案

首先需要做一些准备,以清除不需要的索引子数组。

代码:(Demo)

$array1['data']=current($array1['data']); // repair
$array2['data']=current($array2['data']); // repair
var_export(array_merge_recursive($array1, $array2));  // merge as intended

输出:

array (
  'data' => 
  array (
    'raw' => 
    array (
      'key1' => 
      array (
        0 => 'value1',
        1 => 'value1_1',
        2 => 'value1_2',
      ),
      'key3' => 'value3',
      'key2' => 'value2',
    ),
  ),
)

问题更新后表达更复杂的数据结构...

代码:(Demo)

foreach ($array1['data'] as $set) {
    foreach ($set['raw'] as $k => $v) {
        if (!isset($result['data']['raw'][$k])) {
            $result['data']['raw'][$k] = $v;
        }else {
            $result['data']['raw'][$k] = array_merge((array)$result['data']['raw'][$k],(array)$v);
        }
    }
}
foreach ($array2['data'] as $set) {
    foreach ($set['raw'] as $k => $v) {
        if (!isset($result['data']['raw'][$k])) {
            $result['data']['raw'][$k] = $v;
        }else{
            $result['data']['raw'][$k] = array_merge((array)$result['data']['raw'][$k],(array)$v);
        }
    }
}
var_export($result);

关于php - 递归添加元素到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50371181/

相关文章:

php - 谷歌浏览器缓存 PDF 文件

c - 在c中的数组中查找一个字符

c - 如何使用回调修改 GtkWidget 数组的元素

arrays - Perl 数组快捷方式

Git: merge 到master,同时自动选择用分支覆盖master文件

r - 仅当使用 data.table 的 := 连接两个表时才需要第一个实例

javascript - 当我得到 $q 时变量未定义?

php - 如何验证在 node.js 中使用 php-crypt 创建的哈希

java - Java 中有 JavaScript Object.assign() 类似物吗?

PHP PayPal 自适应支付 - 链式支付