关于数组的比较,请大神们帮忙看看。 本帖最后由 loveunh1982 于 2014-06-06 18:49:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能否实现array_diff 类似的效果呢,如果一样就返回空数组,如果不一样,就返回差集 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;} 换个算法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;} php+mysql问题 高分求IP数据库 php生成的验证码图片无法显示 PHP调用ATL动态库,ATL动态库能够跟踪调试吗 奇怪问题,我升级phpmyadmin后,如果不输入index.php,就会出现Index of /phpmyadmin,而不是进入phpmyadmin ──────── 如何把常量放入定界符里呢? ──────── 关于对图片进行剪切的问题,大家帮我看看 设计派工管理系统时建立数据库表结构遇到的一个问题? php于jsp一块儿集成在apache下,仍旧稳定,快速吗,可行吗 请问用PHP怎么建立一个目录? 【求助】导航栏 php的二级菜单联动问题
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;
}
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;
}