2016-01-04 97 views
1
$arr1 = ['value1','value2','value3','value4']; 
$arr2 = ['value1','value3']; 

我的函數返回true,如果至少一個交叉值將在處以罰款:array_intersect_key和array_diff_key之間的時間操作差異是什麼?

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 
} 

在那裏實現與最少的操作時間這個功能更好的辦法?

+3

只要使用'array_intersect()',然後你不必翻轉你的數組。 – Rizier123

回答

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

這裏不需要調用'array_keys()'。 – Rizier123

1

首先,你不應該在這裏使用是關鍵,但值。

那麼,在集理論,DIFF相交是兩個不同的操作。

根據手冊:

array_diff

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

比較ARRAY1對一種或多種其它陣列和返回 值ARRAY1中不存在於任何其它陣列的。

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; 
} 
相關問題