了解array_udiff()

时间:2013-07-01 09:59:28

标签: php arrays

我有以下简单的功能来尝试理解array_udiff()函数

function udiffCompare( $value, $value2 )
{

echo $value . " - " . $value2 . "<br />";

}

$newArray   =   array(  

                    'value2' => 2, 
                    'value3' => 3, 
                    'value4' => 4
                );

$newArray2  =   array(  

                    'value2' => 2, 
                    'value3' => 3, 
                    'value4' => 4
                );

array_udiff( $newArray, $newArray2, 'udiffCompare' );

我希望这只是回归:

2 - 2
3 - 3
4 - 4

然而它返回:

3 - 2
4 - 3
3 - 2
4 - 3
4 - 4
4 - 3
4 - 3
3 - 2

这让我相信在这里我真的不理解array_udiff()如何运作。

即使我用以下内容替换上面的echo语句:

if( $value == $value2 ) { return 1; } else { return 0; }

即使传递给函数的所有值都相等,输出的数组也是完全空的。

请有人发光吗?

2 个答案:

答案 0 :(得分:3)

array_udiff计算两个数组的差异。这是$newArray中不在$newArray2中的所有条目。在这种情况下,结果是一个空数组,因为没有区别。

您看到的输出是因为您回显了正在比较的每个值。这是一个较大的列表的原因是,为了找出差异array_udiff必须将$newArray中的每个值与$newArray2中的每个值进行比较。

答案 1 :(得分:0)

您没有为array_udiff()编写正确的回调函数。

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

此外,您给出的这2个样本数组的数学差异为NULL 这就是为什么如果使用此函数,您将获得空结果集。在array_diff();

上查看

灰色区域显示两个集合的差异:

enter image description here