一、举例说明
例如有两个数组A和B(当然这个A和B也可以是key=>value形式)
A = array('tt','cc','dd','mm')
B = array('ad','tt','cc','qq')
希望得到的结果是:
sameArr = array('tt','cc')
A = array('dd','mm')
B = array('ad','qq')
二、解决方案
2.1、方法一:for循环取出数据
1、for循环一个A数组;
2、使用array_search判断元素是否存在B数组中;
3、存在后unset A和B中的该元素;
4、将该相同元素添加到sameArr数组中
具体代码:
-
-
<?php
-
$A = array ( 'tt' , 'cc' , 'dd' , 'mm' ) ;
-
$B = array ( 'ad' , 'tt' , 'cc' , 'qq' ) ;
-
$sameArr = array ( ) ;
-
for ( $i = 0 ; $i < count ( $A ) ; $i ++ ) {
-
$pos = array_search ( $A [ $i ] , $B ) ;
-
if ( $pos > 0 ) {
-
$sameArr [ ] = $A [ $i ] ;
-
unset ( $A [ $i ] ) ;
-
unset ( $B [ $pos ] ) ;
-
}
-
}
-
var_dump ( $sameArr , $A , $B ) ;
key value数组形式和此类似,只需要将for循环替换为foreach循环即可,下面看一下运行结果:
返回结果是我们预期的结果。
2.2、方案二:利用PHP内置函数array_diff和array_intersect
同样也可以使用
array_diff分割,获取在A中而不在B中的元素或者在B中而不在A中的元素,但是无法获取相同元素,要获取相同元素的话,需要使用。
array_intersect函数来获取,方法如下:
-
<?php
-
$sameArr = array_intersect ( $A , $B ) ;
-
$diffA = array_diff ( $A , $B ) ;
-
$diffB = array_diff ( $B , $A ) ;
-
var_dump ( $sameArr , $diffA