我有以下简单的功能来尝试理解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; }
即使传递给函数的所有值都相等,输出的数组也是完全空的。
请有人发光吗?
答案 0 :(得分:3)
array_udiff
计算两个数组的差异。这是$newArray
中不在$newArray2
中的所有条目。在这种情况下,结果是一个空数组,因为没有区别。
您看到的输出是因为您回显了正在比较的每个值。这是一个较大的列表的原因是,为了找出差异array_udiff
必须将$newArray
中的每个值与$newArray2
中的每个值进行比较。
答案 1 :(得分:0)
您没有为array_udiff()编写正确的回调函数。
如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。
此外,您给出的这2个样本数组的数学差异为NULL 这就是为什么如果使用此函数,您将获得空结果集。在array_diff();
灰色区域显示两个集合的差异: