21,886
社区成员
发帖
与我相关
我的任务
分享
$arr1 = array(
'hwres'=>array(
'cpu'=>array('brief'=>'intel core II i7-2620M @2.7GHZ double'),
'nainboard'=>array('brief'=>'lenvo 4180RW2 intel QM67'),
'memory'=>array('brief'=>'samsang DDR3 1333MHz 4GB'),
'monitor'=>array('brief'=>'youda AUO223E 14'),
'netcard'=>array(
array('type'=>'有线网卡','brief'=>'intel 82579LM Gigabit network connection'),
array('type'=>'无线网卡','brief'=>'瑞昱 RTL8188CE wireless lan 802.11n PCI-E MIC')
)),
'softres'=>array(
'os'=>'windows7 64 home',
'sp'=>'sp3',
'kb'=>array(
array('name'=>'KB11111'),
array('name'=>'KB11112'),
array('name'=>'KB11113')),
'software'=>array(
array('name'=>'QQ2013','version'=>'1.92.6970.0','time'=>"2013/7/4"),
array('name'=>'sougou输入法','version'=>'6.7.0.0747','time'=>'2013/7/4')
)
)
);
$arr2 = array(
'hwres'=>array(
'cpu'=>array('brief'=>'intel core II i7-2620M @2.7GHZ double'),
'nainboard'=>array('brief'=>'lenvo 4180RW2 intel QM67'),
'memory'=>array('brief'=>'samsang DDR3 1333MHz 4GB'),
'monitor'=>array('brief'=>'youda AUO223E 14'),
'netcard'=>array(
array('type'=>'有线网卡','brief'=>'intel 82579LM Gigabit network connection'),
array('type'=>'无线网卡','brief'=>'瑞昱 RTL8188CE wireless lan 802.11n PCI-E MIC')
)),
'softres'=>array(
'os'=>'windows7 64 home',
'sp'=>'sp3',
'kb'=>array(
array('name'=>'KB11111'),
array('name'=>'KB11113'),
array('name'=>'KB11112')),
'software'=>array(
array('name'=>'sougou输入法','time'=>'2013/7/4','version'=>'6.7.0.0747'),
array('name'=>'QQ2013','version'=>'1.92.6970.0','time'=>"2013/7/4")
)
)
);
function array_diff_recursive($a, $b, &$res=array()) {
if($a == $b) return $res = array();
$res = $a;
if(is_array($a)) {
foreach($a as $k=>$v) {
if(is_numeric($k)) {
foreach($b as $i=>$t) if($v == $t) unset($res[$k]);
}else {
if(isset($b[$k])) array_diff_recursive($a[$k], $b[$k], $res[$k]);
}
}
}
if(is_array($res)) foreach($res as $k=>$v) if($v == array()) unset($res[$k]);
return $res;
}
print_r(array_diff_recursive($arr1, $arr2));
print_r(array_diff_recursive($arr2, $arr1));
function array_diff_recursive($a, $b) {
$res = array();
if(is_numeric(key($a))) { //如果是下标数组,处理上还不尽如人意
foreach($a as $s) {
$r = false;
foreach($b as $k=>$v) {
if($s == $v) {
unset($b[$k]);
$r = true;
break;
}
}
if(! $r) $res[] = $s;
}
return $res;
}
foreach(array_diff(array_keys($a),array_keys($b)) as $k) $res[$k] = $a[$k];
if($res) return $res;
foreach($a as $k=>$v) {
if($v == $b[$k]) continue;
if(is_array($v)) {
if($t = call_user_func_array( __FUNCTION__, array($v, $b[$k]))) $res[$k] = $t;
}else $res[$k] = $v;
}
return $res;
}