0

这应该是一个非常简单的答案,我可能只是很厚,但我在 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_merge(), array_merge_recursive(), $data1 + $data2, $data2 + $data1, array_replace(),array_replace_recursive()array_diff(),但每个选项似乎都返回两个或四个值而不是三个值。当然,我已经完成了相当一部分的 SO 狩猎。

有任何想法吗?比起任何类型的大规模迭代函数,更喜欢简短而甜蜜的东西!

在此先感谢:) 马特

编辑:

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

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

...但我仍然宁愿不必更改原始数据

4

1 回答 1

0

有没有理由不能使用关联数组?这样你就可以拥有

$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())或者如果它确实有键,则按你想要的方式合并它们?

此外,但不确定,使用关联数组可能会使 array_merge 正常工作(可能)。

于 2013-05-10T14:47:58.797 回答