有人可以向我解释这两个功能之间的区别是什么:
array_diff_ukey
array_diff_uassoc
它们都将键带入比较函数,并根据这些键决定是否应返回数组元素。我检查了php手册,但对我来说他们似乎都在做同样的事情......
array_diff_ukey
返回第一个数组的那些元素,其键与第二个数组中的所有键比较不同(比较的语义是用户定义的)。与这些键关联的值不起作用。
array_diff_uassoc
是上述的“更具包容性”版本,它还检查值:如果第一个数组中的键与第二个数组中的键比较,但值不同,则该元素也包含在结果中。在这种情况下,值的比较不是用户定义的,而是按以下方式工作array_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
将返回 "red" 和 "purple" 元素,$array1
因为这些键不等于$array2
. 然而array_diff_uassoc
,也将返回“蓝色”元素,因为即使该键存在于两个数组中,关联的值也不同。
请注意,“green”元素不包含在任一结果中,尽管关联值是 in 中的字符串和 in 中$array1
的整数$array2
。
从手册:
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
后者同时检查键和值,而第一个只检查键。
添加u
afterdiff_
意味着您必须提供自定义回调函数而不是默认的内置函数。
基于手册的示例(小提琴)
<?php
header("Content-Type: text/plain");
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'black' => 0, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8, 'black' => 0);
var_dump(array_diff($array1, $array2));
var_dump(array_diff_key($array1, $array2));
var_dump(array_diff_assoc($array1, $array2));
?>
输出
array(4) {
["blue"]=>
int(1)
["red"]=>
int(2)
["green"]=>
int(3)
["purple"]=>
int(4)
}
array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}
array(4) {
["blue"]=>
int(1)
["red"]=>
int(2)
["green"]=>
int(3)
["purple"]=>
int(4)
}