array_udiff_assoc()
和array_diff_uassoc()
之间有什么区别?
对于array_udiff_assoc()
,我有以下代码:
function myfunction($v1,$v2)
{
if ($v1===$v2) {
return 0;
}
return 1;
}
$a1 = ["a" => "Cat", "b" => "Dog", "c" => "Horse"];
$a2 = ["a" => "Cat", "b" => "Horse", "c" => "Dog"];
print_r(array_udiff_assoc($a1, $a2, "myfunction"));
结果
Array ( [b] Dog [c] => Horse )
也称为array_diff_uassoc()
:
function myfunction($v1,$v2)
{
if ($v1===$v2) {
return 0;
}
return 1;
}
$a1 = ["a" => "Cat", "b" => "Dog", "c" => "Horse"];
$a2 = ["a" => "Cat", "b" => "Horse", "c" => "Dog"];
print_r(array_diff_uassoc($a1, $a2, "myfunction"));
结果与第一个相同:
Array ( [b] Dog [c] => Horse )
如果它们有任何区别,那是什么?PHP手册没有说它们是彼此的别名。
3条答案
按热度按时间fnatzsnv1#
它们的作用相同,但
udiff-assoc
比较DATA和用户提供的函数,而diff-uassoc
比较INDEX和用户提供的函数。作为对@ lonsesesomeday的回答:如“u”所示,
diff_assoc
将使用内部函数进行所有比较,udiff_uassoc
使用提供的回调进行索引和数据比较。http://www.php.net/manual/en/function.array-diff-uassoc.php
http://www.php.net/manual/en/function.array-udiff-assoc.php
ryevplcw2#
也许一组测试用例可以澄清这些相关的本机函数之间的任何混淆,我将始终使用本机不区分大小写的比较函数
strcasecmp()
来简化演示/解释。下面是对每个函数行为的英语解释:
array_diff()
-区分大小写,仅值比较array_diff_key()
-区分大小写的仅键比较array_diff_ukey()
-仅比较键,不区分大小写array_diff_assoc()
-区分大小写的键和值比较array_diff_uassoc()
-*第一个出现的不区分大小写的键和区分大小写的值比较array_udiff()
-仅比较值,不区分大小写array_udiff_assoc()
-区分大小写的键和不区分大小写的值比较array_udiff_uassoc()
-不区分大小写的键和不区分大小写的值比较$second
数组中限定出现的顺序不同,5.array_diff_uassoc()
在['c' => 'd']
和['m' => 'n']
比较中的行为有何不同。代码:(Demo)
输出:
pxq42qpu3#
array_udiff_assoc
-使用附加索引检查计算数组的差异,通过回调函数比较数据array_diff_uassoc
-使用用户提供的回调函数执行的附加索引检查计算数组的差异因此,这两个函数使用回调函数的位置不同。udiff_assoc使用回调函数比较元素,diff_uassoc在比较索引时使用回调函数。