swsrl 发表于 2015-8-29 09:37:23

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, $array2);
<?php
// ARRAY 1
$a1 = array(
"a1" => 1,
"a3" => array(
"a31" => 31
),
"a4" => array(
"a41" => 41
),
"a5" => 5
);
// 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));
?>
页: [1]
查看完整版本: php 求二维数组的差集|比较二维数组的不同 array_diff