2015-06-01 28 views
1
没有数组路口

我有以下代码:测试在PHP

$result = array_intersect($contacts1, $contacts2); 

这产生:

if (empty($result)) { // i.e. NO INTERECTION 

我才意识到:

Array 
(
[21] => 
[22] => 
[23] => 
[24] => 
[25] => 
[26] => 
[28] => 

if语句我有以下这不会作为不相交的测试工作,因为会生成许多元素,所有元素的值都为null。鉴于此,测试2个数组交叉点的最佳方法是什么?

回答

2

您可以检查所有值是否为空(如果您知道数组中不存在空值)。 您可以使用array_filter功能。

例如:

$result = array_filter(array_intersect($contacts1, $contacts2)); 

这样一来,所有的空值将被移除,并且将结果(如果没有intersecion存在)将一个空数组。

更新: 正如在评论中所说,这将删除非空值。 修订版是使用回调函数:

function filterOnlyNulls($elem) { 
    return $elem !== null; 
} 

$result = array_filter(array_intersect($contacts1, $contacts2), "filterOnlyNulls"); 
3

如果nulls在数组中,然后array_intersect将返回它们作为在两个阵列之中。

$contacts1 = array("bob", "jane", NULL, NULL); 
$contacts2 = array("jim", "john", NULL, NULL); 
$result = array_intersect($contacts1, $contacts2); 
print_r($result); 

阵列 ( [2] => [3] => )

可以筛选使用array_filter路口前每个阵列。它需要一个回调函数,但是默认情况下,所有等于FALSE的条目都将被删除,包括NULL。

$result2 = array_intersect(array_filter($contacts1), array_filter($contacts2)); 
print_r($result2); 

阵列 ( )

使用,如果你想专门只过滤空值,或者你的要求是什么callback

function mytest($val) { 
    return $val !== NULL; 
} 
$result3 = array_intersect(array_filter($contacts1, "mytest"), array_filter($contacts2, "mytest")); 
print_r($result3); 

阵列 ( )

+0

感谢您的信息,非常实用。 – user61629