2008-10-22 63 views
12

您还可以如何比较两个数组($ A和$ B)并将匹配元素从第一个减少到准备下一个循环到数组$ A?如何比较两个数组并从下一个循环中删除匹配的元素?

$A = array(1,2,3,4,5,6,7,8); 
$B = array(1,2,3,4); 

$C = array_intersect($A,$B); //equals (1,2,3,4) 
$A = array_diff($A,$B);  //equals (5,6,7,8) 

这是最简单的方法还是有办法使用另一个我没有想到的函数?我的目标是有一个数组,我可以循环,抽出相关内容组(我已经在其他地方定义了这些关系),直到数组返回false。

+0

这可能是我,但我不认为这个问题是很清楚的。当我读它时,你只是对array_diff($ A,$ B)感兴趣(这看起来很简单)。或者$ C的计算也是必不可少的? (如果是这样,你可以使用array_diff($ A,$ C)而不是array_diff($ A,$ B)。) – mweerden 2008-10-22 13:16:16

+0

不,我声明$ C是$ A和$ B的交集 – kevtrout 2008-10-22 17:58:08

回答

11

你已经明白了。只需使用array_diffarray_intersect。没有比这更容易。

编辑: 例如:

$arr_1 = array_diff($arr_1, $arr_2); 
$arr_2 = array_diff($arr_2, $arr_1); 

Source

+2

也考虑[array_diff_assoc ](http://www.php.net/manual/en/function.array-diff-assoc.php)如果两个数组中的值的顺序很重要。 – Duncanmoo 2014-04-23 13:21:20

2

array_unique见。如果连接这两个数组,它会将所有重复数据抽出。

0

嘿,更好的解决方案:array _ uintersect. 这让我们按照array_intersect比较数组,然后它可以让您将数据与回调函数进行比较。

0

尝试将此

$a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w'); 
$b = array(1=>'a',6=>'b',2=>'y',3=>'z'); 
$c = array_intersect($a, $b); 

$result = array_diff($a, $c); 
print_r($result); 
2

亲爱的方便,清洁的方式

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2); 
相关问题