$a = ['1','2','4','3'];//提交答案 $b = ['2','1','3'];//正确答案 $state = $this->diffArray($b, $a); echo '<pre>'; print_r($state);die;
/** * 以第一个参数为主进行进行比较 * **/ public function diffArray($arr1 , $arr2 ){ $arrRet = array(); #针对关联数组 if($this->is_assoc($arr1) && $this->is_assoc($arr2) ){ if (empty($arr1)) { $arr1 = array(); } if (empty($arr2)) { $arr2 = array(); } foreach ($arr1 as $key => $value){ if(!in_array($key, array_keys($arr2))){ if(!array_key_exists($key, $arrRet)){ array_push($arrRet, $key); } continue; } if($arr1[$key] !== $arr2[$key]){ if(!array_key_exists($key, $arrRet)){ array_push($arrRet, $key); } } #针对元素为数组的情况 if(is_array($value)){ array_merge($arrRet,$this->diffArray($value,$arr2[$key])); } } }elseif($this->is_assoc($arr1)===false && $this->is_assoc($arr2)===false) {#针对索引数组 $arrRet = array_merge(array_diff($arr1, $arr2),array_diff($arr2, $arr1)); }else { new Exception("数组类型不一致!"); } return $arrRet; } /** * 判断是否为关联数组 * **/ private function is_assoc($arr) { if(!is_array($arr)) return -1; return !(array_values($arr) === $arr); }
Array ( [0] => 4 )