PHP相交两个数组并替换一项

Posted

技术标签:

【中文标题】PHP相交两个数组并替换一项【英文标题】:PHP intersect two arays and replace one item 【发布时间】:2013-04-07 15:21:29 【问题描述】:

我有两个多维数组,我想使用 php array_intersect 函数相交,但在输出之前,它还必须只替换数组的一个元素。

例子:

$array1 = Array(
Array(37768201, 273, Array(602, 603, 604, 605, 606), 0),
Array(37483503, 473, Array(604, 605, 606), 0),
Array(37500944, 332, Array(602, 603), 0)
);

$array2 = Array(
Array(37768201, 273, Array(602, 603, 604, 605, 606), 13852),
Array(37483503, 473, Array(603, 604, 605, 606), 13853),
Array(37500944, 332, Array(602, 603, 604, 605), 13854),
Array(37483903, 152, Array(602, 603, 604, 605, 606), 13855),
Array(37483703, 175, Array(602, 603, 604, 605, 606), 13856)
);

array_intersect 结果:

$array1 = Array(
Array(37768201, 273, Array(602, 603, 604, 605, 606), 0),
Array(37483503, 473, Array(604, 605, 606), 0),
Array(37500944, 332, Array(602, 603), 0)
);

预期结果:

$array1 = Array(
Array(37768201, 273, Array(602, 603, 604, 605, 606), 13852),
Array(37483503, 473, Array(604, 605, 606), 13853),
Array(37500944, 332, Array(602, 603), 13854)
);

这可以使用 array_uintersect 代替吗?

【问题讨论】:

【参考方案1】:

你可以在调用array_intersect()之后添加一小段代码

你的例子:

foreach ($array1 as $key => $values)
  $array1[$key][3] = 13852;

虽然如果你说哪些数据是可变的,那就容易多了。例如,数字13852 似乎在每次执行和(可能)在每个子数组中都是可变的($array2[0][3] != $array2[1][3])。那么该代码将无效,您应该改用它:

foreach ($array1 as $key => $values)
  $array1[$key][3] = $array2[$key][3];

还有更多可能的情况。

【讨论】:

谢谢!这就像小头痛后的药丸。 ;) 当这两个大数组中的元素顺序不同时,仍然可能会出现问题。 @ClaudiuOlaru ,我不明白你为什么不接受我的回答。这只是可能出现的问题之一,但正如我所说,还有数百个问题:And there are just many more possible cases.。我的回答在 2 周前正确回答了您的问题,如果您的情况现在不同,您应该尝试自己解决,然后,如果您无法解决,请在此处提出新问题或向开发人员付款。或者使用一些适用于所有情况的大型代码来合并数组(但不要指望任何人在这里免费做类似的事情)。

以上是关于PHP相交两个数组并替换一项的主要内容,如果未能解决你的问题,请参考以下文章

PHP相交与MySQL相交

javascript js求和2个数组并返回一个新数组

从查找中获取键

展平 3D NumPy 数组中的内部元组并作为浮点数保存到 CSV

拆分两个元素的元组并添加到熊猫数据框[重复]

我无法与数组相交。 POST,PHP,如何与 POST 数组相交?