array_intersect_key和array_diff_key之间的时间操作有什么区别


What is the differences in time manipulation between array_intersect_key and array_diff_key?

$arr1 = ['value1','value2','value3','value4']; 
$arr2 = ['value1','value3'];

如果至少有一个相交值将被罚款,我的函数返回 true:

function is_array_intersect($arr1,$arr2) {
    $arr1 = array_flip($arr1);
    $arr2 = array_flip($arr2);
    $intersectArr = array_intersect_key($arr1,$arr2);
    if (count($intersectArr)) {
        return true;
    }
    return false
}

有没有更好的方法以最短的操作时间实现此功能?

这可以简化。

$arr1 = ['value1','value2','value3','value4']; 
$arr2 = ['value1','value3'];
$arr3 = ['value1a','value3'];
$arr4 = ['value1a','value3a'];
echo "is_array_intersect()'n";
echo "arr2 = " . (is_array_intersect($arr1,$arr2) ? 'TRUE' : 'FALSE') . "'n";
echo "arr3 = " . (is_array_intersect($arr1,$arr3) ? 'TRUE' : 'FALSE') . "'n";
echo "arr4 = " . (is_array_intersect($arr1,$arr4) ? 'TRUE' : 'FALSE') . "'n";
echo "is_array_intersect2()'n";
echo "arr2 = " . (is_array_intersect2($arr1,$arr2) ? 'TRUE' : 'FALSE') . "'n";
echo "arr3 = " . (is_array_intersect2($arr1,$arr3) ? 'TRUE' : 'FALSE') . "'n";
echo "arr4 = " . (is_array_intersect2($arr1,$arr4) ? 'TRUE' : 'FALSE') . "'n";

function is_array_intersect($arr1,$arr2) {
    $arr1 = array_flip($arr1);
    $arr2 = array_flip($arr2);
    $intersectArr = array_intersect_key($arr1,$arr2);
    if (count($intersectArr)) {
        return true;
    }
    return false;
}
function is_array_intersect2($arr1,$arr2) {
    return count(array_intersect($arr1,$arr2)) > 0;
}

输出:

is_array_intersect()
arr2 = TRUE
arr3 = TRUE
arr4 = FALSE
is_array_intersect2()
arr2 = TRUE
arr3 = TRUE
arr4 = FALSE

查看实际代码:http://sandbox.onlinephpfunctions.com/code/912306c093a9dcc3b760cd6c84bdd95c0595b19b

首先,您不应该在这里使用键,而应该使用值。

好吧,在集合论中,差分相交是两种不同的运算。

根据手册:

array_diff

array array_diff ( array $array1 , array $array2 [, array $... ] )

将 array1 与一个或多个其他数组进行比较,并返回 数组 1 中任何其他数组中不存在的值

array_intersect

array array_intersect ( array $array1 , array $array2 [, array $... ] )

array_intersect(( 返回一个包含 array1 所有值的数组 存在于所有参数中。请注意,密钥将被保留。

所以,这里适合你的功能是 array_intersect .然后你可以将函数重写为:

function is_array_intersect(array $arr1, array $arr2) {
    return count(array_intersect($arr1, $arr2)) > 0;
}