$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
}
是否有更好的方法以最短的操作时间实现此功能?
答案 0 :(得分:1)
这可以简化。
$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
答案 1 :(得分:1)
首先,你不应该在这里使用密钥,而是使用值。
嗯,在Set Theory中, diff 和 intersect 是两种不同的操作。
根据手册:
array array_diff ( array $array1 , array $array2 [, array $... ] )
将array1与一个或多个其他数组进行比较,返回 array1中不存在于任何其他数组中的值。
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;
}