php如何删除两个数组中相同的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php如何删除两个数组中相同的元素相关的知识,希望对你有一定的参考价值。

首先,我看到这个问题中描述是“如何删除两个数组中相同的元素”,虽然那个人写了一大堆,竟然用的是array_unique(),从分析到给出的demo一直在解决如何删除“一个”数组中“重复”的元素。汗!答非所问的答案竟然会被采纳。

这里,简单分析一下提问者的真实意图,分以下2种情况:

1.现在有2个一维数组, $arr1和$arr2,现在要删除 $arr1 中存在于 $arr2 的元素。

解决方案:使用array_diff对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值,代码如下:

<?php
$arr1 = array(1, 2, 3, 4);
$arr2 = array(2, 4);
//这一句即可
$arr1 = array_diff($arr1,$arr2);
var_dump($arr1);

2.先声明一下,我看了lt318025大神给出的答案,他的思维非常活跃,已经分了2种情况。

现在有2个一维数组,$a和$b,即删除$a中存在于$b的元素,删除$b中$a存在的元素,组后合并返回。

可是lt318025大神用的PHP版本太高,给出的demo在低版本PHP下运行失败,这里修正一下:

<?php
$a=array(1,2,3);
$b=array(2,3,4);
//得到存在于$a但不存在于$b中的元素组成的数组
$c=array_diff($a,$b);
//这里简单求出在$a但不在$b中的元素
var_dump($c);

//得到存在于$a但不存在于$b中的元素组成的数组与存在于$b但不存在于$a中的元素组成的数组的并集
$d=array_merge(array_diff($a,$b),array_diff($b,$a));
//这里彻底剔除了同时存在于$a和$b中的元素
var_dump($d);

 究竟是哪一种情况,这需要看提问者的需求了。

参考技术A php如何去除数组中相同的元素
如何去除数组中相同的元素?在php手册中有这样写
array_unique(PHP 4 >= 4.0.1)
array_unique -- 移除数组中重复的值
说明
array array_unique ( array array)

array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。
第一个单元将被保留。
例子 1. array_unique() 例子
<?php
$input = array ("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique ($input);
print_r($result);
?>本回答被提问者和网友采纳
参考技术B <?php
$a=array("第一"=>12,"第二"=>23,34,45);
$b=array("第一"=>11,"第二"=>22,33,45);
foreach ($a as $key=>$v1)
echo $key."=>". $v1."<br />";
foreach($b as $key2=>$v2)
if($v1==$v2)
unset($a[$key]);//删除$a数组同值元素
unset($b[$key2]);//删除$b数组同值元素



print_r($a);
print_r($b);
?>
参考技术C $a=[1,2,3];
$b=[2,3,4];
$c=array_diff($a,$b);//[1]
$d=array_merge(array_diff($a,$b),array_diff($b,$a));//[1,4]
var_dump($c,$d);

php 大数组合并去重 两个数组元素都过万

过万没关系,如果一个数组内容占一个机器字长,1万才10K WORD而已,现在机器内存很大,几千万都瞬间就处理完了,完全可以按照一般方法编程。

一般方法的合并数组,要看小标是0、1、2、....还是其它的关键字,相同下标的合并还是相同值的合并,具体细节有区别,流程都是一样的:两次for each把两个数组的内容添加到新数组里面。
参考技术A $a = array('1001','1002');
$b = array('1002','1003','1004');
$c = array('1003','1004','1005');
$d = array_flip(array_flip(array_merge($a,$b,$c)));

可以试试这个方法 也许效率高一点 

以上是关于php如何删除两个数组中相同的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何把两个数组进行合并,并删除它们的相同元素

php中如何删除二维数组中含有指定元素的所有一维数组?要求如下:

php数组元素值的修改和删除问题

如何将两个数组的元素建立起对应关系

php中怎么删除数组的第一个元素和最后一个元素

java如何删除掉数组中的某个元素??