2013-07-01 57 views
2

我有以下简单的功能,试图了解array_udiff()功能了解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'); 

我希望这只是返回:

​​

但是它返回:

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

http://stackoverflow.com/questions/10271708/how-does-array-udiff-work – underscore

+1

即使我添加if($ value == $ value2){return 1; } else {return 0; }它仍然返回一个巨大的不同数字列表,这意味着即使所有的值都相等,我的输出数组也是完全空的。 –

+0

你的回调函数是怪:'int回调(混合$ a,混合$ b)'应该是它的签名。虽然我会说'array_map'或'list'更适合你的用例 –

回答

3

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

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

+0

啊,对,为什么我现在看到长列表到某一点是有意义的......但它似乎仍然没有比较“2”的第一个值和任何东西,并且比较3-2被做出3次?没有道理的是为什么用'if($ value == $ value2){return 1; } else {return 0; }'正在返回一个空数组? –

+0

它返回一个空白数组,因为两个数组没有区别。因为没有区别,所以没有任何回报。尝试仅向'$ newArray'添加另一个值。 – Jim

+0

好的......我不知道空白数组是否会被返回,如果它们是空白的......我假设它会返回任何在数组中类似的值......将第一个值添加到第一个值数组让它按预期返回......感谢Jim的帮助! –

0

您没有为array_udiff()编写适当的回调函数。

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

给你这2个样本阵列而且数学上的差异是NULL这就是为什么你会得到空的结果集,如果您使用此功能。检查它array_diff();

灰色区域表示两个集合的区别:

enter image description here