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" => 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)); ?> |
转载于:https://www.cnblogs.com/7bus/archive/2010/11/25/1888222.html