大家都知道一维数组计算差集的内置函数是array_diff_assoc($array1, $array2),但是多维数组如何计算差集呢,就需要写一个相应的算法。我写了一个算法供大家参考。
<?php
//多维数组的差集
function array_diff_assoc_recursive($array1,$array2){
$diffarray=array();
foreach ($array1 as $key=>$value){
//判断数组每个元素是否是数组
if(is_array($value)){
//判断第二个数组是否存在key
if(!isset($array2[$key])){
$diffarray[$key]=$value;
//判断第二个数组key是否是一个数组
}elseif(!is_array($array2[$key])){
$diffarray[$key]=$value;
}else{
$diff=array_diff_assoc_recursive($value, $array2[$key]);
if($diff!=false){
$diffarray[$key]=$diff;
}
}
}elseif(!array_key_exists($key, $array2) || $value!==$array2[$key]){
$diffarray[$key]=$value;
}
}
return $diffarray;
}
$array1=array(1,2,3,array(1,2,array(1)));
$array2=array(1,2,4,array(1,2,3));
print_r(array_diff_assoc_recursive($array1,$array2));