我想知道检查两个(可能是多维)数组包含相同值的最快方法。
在其他方面我想知道第一个数组的(无序)值集是否等于第二个数组的值集
更新:
1)不能使用==或===。他们还检查关键的平等。
2)不能使用array_diff。它不适用于多维数组
答案 0 :(得分:2)
对于嵌套数组,没有简单的方法可以做到这一点;你必须编写自己的递归函数。看起来array_udiff
也不合适(因为需要比比较函数更大/更少的信息);
这应该可以解决问题:
function recursive_sort_array($a) {
if(!is_array($a))
return $a;
$a = array_map('recursive_sort_array', $a);
sort($a);
return array_values($a);
}
function arrays_different($a, $b) {
return recursive_sort_array($a) === recursive_sort_array($b);
}
它的作用:第一个函数(recursive_sort_array
)以递归方式对数组进行排序,并仅返回与数字索引相关联的值。在此操作之后,具有相同值(递归)的任何数组都将相等,然后可以与其中一个相等运算符进行比较。