也许一系列测试用例可以消除这些相关原生函数之间的任何混淆。我将始终使用本机不区分大小写的比较函数strcasecmp() 来简化演示/说明。
下面是每个函数的行为方式的简单英文解释:
-
array_diff() - 区分大小写的仅值比较
-
array_diff_key() - 区分大小写的仅键比较
-
array_diff_ukey() - 不区分大小写的仅键比较
-
array_diff_assoc() - 区分大小写的键和区分大小写的值比较
-
array_diff_uassoc() - * 首次出现不区分大小写的键和区分大小写的值比较
-
array_udiff() - 不区分大小写的仅值比较
-
array_udiff_assoc() - 区分大小写的键和不区分大小写的值比较
-
array_udiff_uassoc() - 不区分大小写的键和不区分大小写的值比较
*请密切注意 5. array_diff_uassoc() 在 ['c' => 'd'] 和 ['m' => 'n'] 比较方面的行为不同,这是因为 $second 数组中的限定出现顺序。
代码:(Demo)
$first = [
'A' => 'B',
'c' => 'd',
'E' => 'f',
'g' => 'I',
'k' => 'F',
'm' => 'n',
'o' => 'p',
];
$second = [
'a' => 'b',
'A' => 'b',
'C' => 'd',
'c' => 'D',
'e' => 'F',
'G' => 'H',
'i' => 'B',
'J' => 'D',
'm' => 'N',
'M' => 'n',
'O' => 'r',
];
echo "array_diff()\n";
var_export(array_diff($first, $second));
echo "\n---\narray_diff_key()\n";
var_export(array_diff_key($first, $second));
echo "\n---\narray_diff_ukey()\n";
var_export(array_diff_ukey($first, $second, 'strcasecmp'));
echo "\n---\narray_diff_assoc()\n";
var_export(array_diff_assoc($first, $second));
echo "\n---\narray_diff_uassoc()\n";
var_export(array_diff_uassoc($first, $second, 'strcasecmp'));
echo "\n---\narray_udiff()\n";
var_export(array_udiff($first, $second, 'strcasecmp'));
echo "\n---\narray_udiff_assoc()\n";
var_export(array_udiff_assoc($first, $second, 'strcasecmp'));
echo "\n---\narray_udiff_uassoc()\n";
var_export(array_udiff_uassoc($first, $second, 'strcasecmp', 'strcasecmp'));
输出:
array_diff()
array (
'E' => 'f',
'G' => 'I',
'o' => 'p',
)
---
array_diff_key()
array (
'E' => 'f',
'k' => 'F',
'o' => 'p',
)
---
array_diff_ukey()
array (
'k' => 'F',
)
---
array_diff_assoc()
array (
'A' => 'B',
'c' => 'd',
'E' => 'f',
'G' => 'I',
'k' => 'F',
'm' => 'n',
'o' => 'p',
)
---
array_diff_uassoc()
array (
'A' => 'B',
'E' => 'f',
'G' => 'I',
'k' => 'F',
'm' => 'n',
'o' => 'p',
)
---
array_udiff()
array (
'G' => 'I',
'o' => 'p',
)
---
array_udiff_assoc()
array (
'E' => 'f',
'G' => 'I',
'k' => 'F',
'o' => 'p',
)
---
array_udiff_uassoc()
array (
'G' => 'I',
'k' => 'F',
'o' => 'p',
)