Php 递归地合并两个数组,或者根据一个键替换为后者

Php 递归地合并两个数组,或者根据一个键替换为后者,php,Php,这应该是一个非常简单的答案,我可能只是有点笨,但我在PHP中有两个数组: $data1 = array( array( 'qid' => 'q-prof-1-1', 'value' => 10, ), array( 'qid' => 'q-prof-2-1', 'value' => 3, ), ); $data2 = array( array( 'qid' => 'q-prof-2-1', 'val

这应该是一个非常简单的答案,我可能只是有点笨,但我在PHP中有两个数组:

$data1 = array(
  array(
    'qid' => 'q-prof-1-1',
    'value' => 10,
  ),
  array(
    'qid' => 'q-prof-2-1',
    'value' => 3,
  ),
);
$data2 = array(
  array(
    'qid' => 'q-prof-2-1',
    'value' => 5,
  ),
  array(
    'qid' => 'q-prof-3-2',
    'value' => 1,
  ),
);
我想得出以下结论:

$result = array(
  array(
    'qid' => 'q-prof-1-1',
    'value' => 10,
  ),
  array(
    'qid' => 'q-prof-2-1',
    'value' => 5,
  ),
  array(
    'qid' => 'q-prof-3-2',
    'value' => 1,
  ),
);
。。。因此这两个将被合并,但是,如果它发现一个qid与另一个相匹配,它将用后者替换它

我尝试了
array\u merge()
array\u merge\u recursive()
$data1+$data2
$data2+$data1
array\u replace()
array\u replace\u recursive()
array\u diff()。当然,我也做了我应得的一份S.O狩猎

有什么想法吗?与任何类型的大规模迭代函数相比,我更喜欢短而甜美的函数

提前感谢:) 马特

编辑:

我刚刚意识到,如果我将$data1和$data2中的数组转换为键值对,那么大多数合并和替换函数都可以工作,例如:

$data1 = array(
  'q-prof-1-1' => array(
    'qid' => 'q-prof-1-1',
    'value' => 10,
  ) // ... etc etc
);

。。。但是我还是不想更改原始数据,有什么原因不能使用关联数组吗?这样你就可以

$array = array('q-prof-1-1' => 10, 'q-prof-2-1' => 3);
$array2 = array('q-prof-2-1' =>  5, 'q-prof-3-2' => 1);
然后循环遍历$array2,如果$array没有键(key_exists(),如果我没记错的话),或者如果它确实有键,则按您的方式合并它们


另外,但不确定的是,使用关联数组可能会使数组合并正常工作(可能)。

嘿,谢谢你的回答。在看到你的评论之前,我刚刚编辑了我的问题,但是是的,它确实适用于关联数组。但是我不想改变原始数据!哈哈哈,我想我没有看到你的编辑。这个答案看起来可能有用。否则,我认为您必须编写自己的递归数组。您可以像上面的答案一样指定自己的合并函数。然后从那里开始。保留原始数据结构有点痛苦。