Php 理解数组_udiff()

Php 理解数组_udiff(),php,arrays,Php,Arrays,我有以下简单的函数来尝试理解array\u udiff()函数 function udiffCompare( $value, $value2 ) { echo $value . " - " . $value2 . "<br />"; } $newArray = array( 'value2' => 2, 'value3' => 3,

我有以下简单的函数来尝试理解
array\u 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\u udiff()
的工作原理,这里有一些东西我真的不明白

即使我将上面的echo语句替换为:

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

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


有人能点灯吗?

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


您看到的输出是因为您回显正在比较的每个值。这是一个较大列表的原因是,为了找出差异,
array\u udiff
必须将
$newArray
中的每个值与
$newArray2
中的每个值进行比较,
array\u udiff
计算两个数组的差异。这是
$newArray
中不在
$newArray2
中的所有条目。在这种情况下,结果是一个空数组,因为没有差异


您看到的输出是因为您回显正在比较的每个值。这是一个较大列表的原因是,为了找出差异,
array\u udiff
必须将
$newArray
中的每个值与
$newArray2
中的每个值进行比较,您没有为其编写正确的回调函数

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

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

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


您没有为编写正确的回调函数

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

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

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


即使我添加if($value=$value2){return 1;}或者{return 0;}它仍然返回大量不同的数字列表,这意味着即使所有的值都相等,我输出的数组也是完全空的。你的回调函数应该受到责备:
int callback(mixed$a,mixed$b)
应该是它的签名。虽然我认为
array\u map
list
更适合您的用例这是关于数组排序的,但是比较函数的基本概念是相同的:阅读更多的概念介绍。即使我添加if($value=$value2){return 1;}else{return 0;}它仍然返回大量不同的数字列表,这意味着我输出的数组是完全空的,即使所有的值都相等。应该怪你的回调函数:
int callback(mixed$a,mixed$b)
应该是它的签名。虽然我会说
array\u map
list
更适合您的用例这是关于数组排序的,但是比较函数的基本概念是一样的:阅读更多的概念介绍。啊,好的,这就说明了为什么我现在看到一个长的列表。。。然而,它似乎仍然没有将“2”的第一个值与任何东西进行比较,并且将3-2进行了3次比较?没有意义的是,为什么要用
if($value==$value2){return 1;}替换echo语句,否则{return 0;}
返回一个空数组?它返回一个空数组,因为这两个数组没有区别。因为没有区别,就没有回报。尝试仅向
$newArray
添加另一个值。确定。。。我不知道如果它们是空的,将返回一个空数组。。。我假设它只会返回数组中相似的任何值。。。向第一个数组添加另一个值使其按预期返回。。。谢谢你的帮助,吉姆!手册中:“如果第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数。”(也就是说,当$aOk时,你返回了错误的值,不,我不认为我在进一步玩后仍然理解它…如果我比较两个数组,一个是值
1,2,3
,另一个是值
1,2,3,4,5
,并运行一个简单的
If($value==$value2){return 0;}return 1;
在回调函数中,为什么它只返回2和3?它不是返回1,2,3还是4,5…我不明白为什么它只返回2,3…啊,好吧,这说明了为什么我现在看到长列表到某个点…但是它似乎仍然没有比较“2”的第一个值使用任何东西,并且比较3-2进行了3次?没有意义的是为什么要用
if($value==$value2){return 1;}else{return 0;}替换echo语句
返回的是空白数组吗?它返回的是空白数组,因为这两个数组没有区别。因为没有区别,所以没有什么可返回的。请尝试仅向
$newArray
添加另一个值。好吧……我不知道如果它们是空白数组,会返回空白数组……我假设它会返回
3 - 2
4 - 3
3 - 2
4 - 3
4 - 4
4 - 3
4 - 3
3 - 2