从 2 个数组中获取唯一值

2022-08-30 22:37:29

我有2个数组,我试图只从它们那里获得唯一值。因此,我不仅试图删除重复项,实际上我还在尝试删除两个重复项。

因此,如果我得到这样的2个数组:

$array1 = array();
$array2 = array();

foreach($values1 as $value1){ //output: $array1 = 10, 15, 20, 25;
    $array1[] = $value1;
}   

foreach($values2 as $value2){ //output: $array2 = 10, 15, 100, 150;
    $array2[] = $value2;
}

我正在寻找的最终输出是

$output = 20, 25, 100, 150;

有什么巧妙的方法可以完成这项工作吗?


答案 1

其他答案都走在正确的轨道上,但array_diff只在一个方向上起作用 - 即。它返回给定的第一个数组中存在的值,这些值不在任何其他数组中。

您要做的是获得两个方向的差异,然后将差异合并在一起:

$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$output = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));
// $output will be (20, 25, 100, 150);

答案 2

不是要减损丹尼尔·范德斯路易斯(Daniel Vandersluis)的答案,而是为了补充它......

您要查找的基本上是数组的 XOR 操作。为此,“merlinyoda at dorproject dot net”在对 http://php.net/manual/en/function.array-diff.php 的评论中提供了以下例程:

<?php
function array_xor ($array_a, $array_b) {
    $union_array = array_merge($array_a, $array_b);
    $intersect_array = array_intersect($array_a, $array_b);
    return array_diff($union_array, $intersect_array)
}
?>

此函数采用不同的方法来计算异或。