php 求二维数组的差集|比较二维数组的不同 array_diff

array_diff只针对一维数组有效,对二维数组无效(求出为空或array(0))。
手册写明是:Note: This function only checks one dimension of a n-dimensional array. Of course you can check deeper dimensions by using array_diff($array1[0], $array2[0]);
<?php 

// ARRAY 1 

$a1 = array( 
"a1" => 1
"a3" => array( 
"a31" => 31 
), 
"a4" => array( 
"a41" => 41 
), 
"a5" => 
); 

// ARRAY 2 
$a2 = array( 
"a1" => 1
"a2" => 2
"a3" => array( 
"a31" => 31
"a32" => array( 
"a321" => 321
"a322" => 322 

), 
"a4" => array( 
"a41" => 42 
), 
"a5" => array( 
"a51" => 51
"a52" => 52 

); 

function array_diff_assoc2_deep($array1, $array2) {
            $ret = array();
            foreach ($array1 as $k => $v) {    
            if (!isset($array2[$k])) $ret[$k] = $v;
            else if (is_array($v) && is_array($array2[$k])) $ret[$k] = array_diff_assoc2_deep($v, $array2[$k]);
            else if ($v !=$array2[$k]) $ret[$k] = $v;
            else
            {
                unset($array1[$k]);
            }
           
            }
            return $ret;
}


//被 doudoukiki修改过的,效率提高了很多

print_r(array_diff_assoc2_deep($a1$a2)); 

?> 
posted @ 2010-11-25 22:58  →province★  阅读(10658)  评论(1)    收藏  举报