PHP比较2个数组是否一致的方法

  •   
  • 10888
  • PHP
  • 0
  • super_dodo
  • 2013/09/22

实际的项目开发中,会存在要去数据中心获取数据,并保存在本项目的数据库中。这样就带来了一个很繁琐的问题,保持数据同步的问题。数据同步有多种方法比如登陆进行同步,刷新页面进行通过,手动同步,但是皆有缺陷和硬伤(此处不再分析同步)。

此处项目中需要手动去同步数据中心的数据,这样当用户点击按钮的时候去同步数据。同一条数据又有很多字段。同步的时候就需要去对比本地的数据是否和远程一致,不一致的情况下再对本地表进行UPDATE.下面就引入正题,对两个数组的比较。

//方法1:直接进行比较
$a = array(1,3,5,7);
$b = array(1,3,5);
$c = array(5,7,1,3);
	
if($a == $b){ echo '匹配!!!<hr>'; }
//($a == $b)  =>不匹配???		数组的长度都不一致
//($a == $c)  =>匹配!!!			顺序如何不影响数组的比较结果
	
//方法2:带Key值的数组进行比较
$aa = array('ip'=>1,'num'=>5,'id'=>3);
$bb = array('ip'=>1,'id'=>3,'num'=>5,'idd'=>3);
$cc = array('ip'=>1,'num'=>5,'idd'=>3,'id'=>3);

if($aa == $bb){ echo '匹配!!!<hr>'; }
//($aa == $bb)  =>不匹配???			数组的长度都不一致
//($aa == $cc)  =>匹配!!!			顺序如何不影响数组的比较结果(不需要ksort排序)key和value都会对应比较
	
//方法3:数组排序后在比较使用 array_diff()
$aaa = array('a'=>1,'b'=>3,'c'=>5,'d'=>7);
$bbb = array('a'=>1,'c'=>3,'b'=>5);
$ccc = array('a'=>1,'c'=>5,'d'=>7,'b'=>3);
$ddd = array('a'=>1,'c'=>5,'d'=>7,'e'=>3);
	
$rt = array_diff($aaa, $bbb);
print_r($rt);				//Array ( [d] => 7 )	
echo '<hr>';
	
$rt = array_diff($bbb, $aaa);
print_r($rt);				//Array ()	---特别需要注意(两个数组连个数都不一样,但是diff之后为空)
echo '<hr>';
	
$rt = array_diff($aaa, $ccc);
print_r($rt);				//Array () ---顺序不影响结果(不需要进行排序)
echo '<hr>';
	
$rt = array_diff($aaa, $ddd);
print_r($rt);				//Array () ---比较的只是value值,key值未对应比较
echo '<hr>';
	
//所以不建议用array_diff()的返回值来作为两个数组是否相等的参考。
//要 array_diff($a, $b) == array_diff($b, $a) == array() 才是两个数组相等
//如果是两个数组array(1,4,3)与array(1,3),这两个数组连个数都不一样,但是diff之后为空,你能说他们相同么,所以,判断之前要先判断拥有的个数,不相同的话就直接为不相同!
	
	
//array_diff的长处是用来查找第一个数组有的值在第二个数组里面是否存在,不存在则显示出来in_array功能的扩展(但是效率不高)
$a = array('aaa1','bbb2','ddd','aaa');
$b = array('aaa','ddd1','aaa','bbb','bbb2');
$c1 = array_diff($a, $b);
print_r($c1);					//输出array( [0] => aaa1 [2] => ddd )
echo '<hr>';
$c2 = array_diff($b, $a);
print_r($c2);					//输出array( [1] => ddd1 [3] => bbb)
echo '<hr>';