我有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;
完成这项工作的任何巧妙方法?
答案 0 :(得分:33)
其他答案都在正确的轨道上,但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);
答案 1 :(得分:8)
不要贬低Daniel Vandersluis的回答,但要加上它......
您正在寻找的基本上是数组的XOR运算。为此,“dorproject dot net的merlinyoda”在对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。
答案 2 :(得分:4)
这是执行此操作的代码。它可能会被优化,但你明白了:
$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);
答案 3 :(得分:3)
尝试下面的代码,它对于数字,字符串和所有条件都适用
以下逻辑仅适用于数字。
$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);
谢谢
答案 4 :(得分:2)
另一个好的解决方案是:
$ array1 = array(10,15,20,25);
$ array2 = array(10,15,100,150);
$ output = array_diff(array_merge($ array1,$ array2),array_intersect($ array1,$ array2));
// $输出将是(20,25,100,150);
答案 5 :(得分:1)
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);
您可以根据需要向函数传递任意数量的数组,它不仅限于两个数组。
答案 6 :(得分:-1)
请参阅array_diff()
$output = array_diff($array1, $array2);