Php 函数之间的区别:array_diff_ukey和array_diff_uassoc

Php 函数之间的区别:array_diff_ukey和array_diff_uassoc,php,arrays,Php,Arrays,有人能给我解释一下这两种功能的区别吗 array_diff_ukey array_diff_uassoc 它们都将键带入比较函数,并根据这些键决定是否应返回数组元素。我查看了php手册,但对我来说,它们似乎都在做相同的事情…来自手册: array_diff — Computes the difference of arrays array_diff_key — array_diff_key — Computes the difference of arrays using keys for c

有人能给我解释一下这两种功能的区别吗

array_diff_ukey
array_diff_uassoc
它们都将键带入比较函数,并根据这些键决定是否应返回数组元素。我查看了php手册,但对我来说,它们似乎都在做相同的事情…

来自手册:

array_diff — Computes the difference of arrays
array_diff_key — array_diff_key — Computes the difference of arrays using keys for comparison
array_diff_assoc — Computes the difference of arrays with additional index check
这个额外的索引检查意味着不仅值必须相同,而且键也必须相同。因此,
array_diff_ukey
array_diff_uassoc
之间的区别在于后者同时检查键和值,而前者只检查键

diff_
之后添加
u
意味着您必须提供一个自定义回调函数,而不是默认的内置函数

基于手册的示例()

从手册中:

array_diff — Computes the difference of arrays
array_diff_key — array_diff_key — Computes the difference of arrays using keys for comparison
array_diff_assoc — Computes the difference of arrays with additional index check
这个额外的索引检查意味着不仅值必须相同,而且键也必须相同。因此,
array_diff_ukey
array_diff_uassoc
之间的区别在于后者同时检查键和值,而前者只检查键

diff_
之后添加
u
意味着您必须提供一个自定义回调函数,而不是默认的内置函数

基于手册的示例()


array_diff_ukey
返回第一个数组中键与第二个数组中的所有键比较不同的元素(比较的语义由用户定义)。与这些键关联的值不起作用

array_diff_uassoc
是上述的“更具包容性”版本,它还检查值:如果第一个数组中的一个键与第二个数组中的一个键比较相等,但值不同,则该元素也包括在结果中。在这种情况下,值的比较不是用户定义的,而是在
数组_diff
中进行的:要使两个值的比较相等,它们的字符串表示形式必须相同

示例,改编自PHP文档:

function key_compare_func($key1, $key2)
{
    if ($key1 == $key2)
        return 0;
    else if ($key1 > $key2)
        return 1;
    else
        return -1;
}

$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => "3", 'purple' => 4);
$array2 = array('green' => 3, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
var_dump(array_diff_uassoc($array1, $array2, 'key_compare_func'));

在这里,
array\u diff\u ukey
将从
$array1
返回“红色”和“紫色”元素,因为这些键与
$array2
中的任何键相比都不相等。但是
array_diff_uassoc
也将返回“blue”元素,因为即使该键存在于两个数组中,关联的值也不同


请注意,“绿色”元素不包括在两个结果中,尽管相关值是
$array1
中的字符串和
$array2
中的整数,但它返回第一个数组中键与第二个数组中所有键比较不同的元素(比较的语义由用户定义)。与这些键关联的值不起作用

array\u diff\u uassoc
是一种“更具包容性的”同样检查值的上述版本:如果第一个数组中的一个键与第二个数组中的键进行比较,但值不同,则该元素也包含在结果中。在这种情况下,值的比较不是用户定义的,而是与
数组_diff
中的操作相同:对于要比较相等的两个值,其字符串表示为上的值必须相同

示例,改编自PHP文档:

function key_compare_func($key1, $key2)
{
    if ($key1 == $key2)
        return 0;
    else if ($key1 > $key2)
        return 1;
    else
        return -1;
}

$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => "3", 'purple' => 4);
$array2 = array('green' => 3, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
var_dump(array_diff_uassoc($array1, $array2, 'key_compare_func'));

在这里,
array_diff_ukey
将从
$array1
返回“红色”和“紫色”元素,因为这些键与
$array2
中的任何键相比都不相等。但是
array_diff_uassoc
也将返回“蓝色”元素,因为即使该键存在于两个数组中,关联的值也不同


请注意,“绿色”元素不包括在两个结果中,尽管相关值是
$array1
中的字符串和
$array2
中的整数,但根据手册
array_diff_uassoc
“使用附加索引检查计算数组的差异”其中,
array\u diff\u ukey
似乎不是文档问题,因为
uassoc
的回调是比较值而不是键。根据手册
array\u diff\u uassoc
“使用附加索引检查计算数组的差异”其中,
array\u diff\u ukey
没有。似乎是文档问题,因为
uassoc
的回调是比较值而不是键。这是不正确的。它还将输出“蓝色”和“绿色”,不是因为索引不同,而是因为值不同。请参阅我的答案。这是不正确的。它还将输出“蓝色”“绿色”不是因为索引不同,而是因为值不同。参见我的答案。