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