php 从2个数组中获取唯一值

yduiuuwa  于 2023-02-18  发布在  PHP
关注(0)|答案(8)|浏览(138)

我有两个数组,我只想从它们中得到唯一的值,所以我不只是想删除重复的,我实际上是想删除两个重复的。
如果我得到这样的两个数组:

$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;

有什么好办法能搞定吗?

bd1hkmkf

bd1hkmkf1#

其他的答案都是正确的,但是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);
rjzwgtxy

rjzwgtxy2#

我不是要贬低丹尼尔·范德斯鲁伊斯的回答,而是要补充一下......
你所寻找的基本上是数组的XOR运算,为此,“merlinyoda at dorproject. 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)
}
?>

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

ztyzrc3y

ztyzrc3y3#

下面是实现这一点的代码。它也许可以优化,但你已经明白了:

$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);

$new_array = array();
foreach($array1 as $value) {
    if(!in_array($value, $array2)) {
        array_push($new_array, $value);
    }
}
foreach($array2 as $value) {
    if(!in_array($value, $array1)) {
        array_push($new_array, $value);
    }
}

print_r($new_array);

要使用array_diff,您必须执行以下操作:

$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);

$out1 = array_diff($array1, $array2);
$out2 = array_diff($array2, $array1);
$output = array_merge($out1, $out2);

print_r($output);
8hhllhi2

8hhllhi24#

尝试以下代码,它适用于数字、字符串和所有条件
以下逻辑仅适用于数字

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

以下逻辑适用于任何条件

$a1 = array('1@gmail.com'); 
$a2 = array('1@gmail.com','2@gmail.com');
$new_array=array_merge($a1,$a2);
$unique=array_unique($new_array);

谢谢

kqhtkvqz

kqhtkvqz5#

另一个好的解决方案是:
$array1 =数组(10,15,20,25);
$array2 =数组(10、15、100、150);
$输出=数组差异(数组合并($array1,$array2),数组交叉($array1,$array2));
// $输出将为(20,25,100,150);

b1zrtrql

b1zrtrql6#

array_diff()manual)函数可用于查找两个数组之间的差异:

$array1 = array(10, 20, 40, 80);
$array2 = array(10, 20, 100, 200);
$diff = array_diff($array1, $array2);
// $diff = array(40, 80, 100, 200);

您可以向函数传递任意数量的数组,而不仅仅限于两个数组。

j8ag8udp

j8ag8udp7#

您可以使用array_mergearray_unique,如下所示:

$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$output = array_unique(array_merge($array1, $array2));

这是简单易懂的。

cidc1ykv

cidc1ykv8#

参见array_diff()

$output = array_diff($array1, $array2);

相关问题