2

我有以下简单的功能来尝试理解该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; }

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

请问有人可以点亮吗?

4

2 回答 2

3

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

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

于 2013-07-01T10:10:22.543 回答
1

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

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

此外,您给出的这两个样本数组的数学差异是 NULL这就是为什么如果您使用此函数会得到空结果集的原因。检查它array_diff();

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

在此处输入图像描述

于 2013-07-01T10:13:06.213 回答