- array_intersect_assoc 带索引检查计算数组的差集##对比数组中有键和值都一样的元素
- array_intersect_key 用键名比较计算数组的交集##返回键值一样的元素, 是array1中的
- array_intersect_uassoc 带索引计算数组的交集, 用回调函数比较索引##回调函数返回0为交集
- array_intersect_ukey用回调函数比较建名来计算数组的交集##回调函数返回0时认为元素交集
- array_interscet 计算数组交集, 键名保留不变##以array1为主值其他数组出现array1的值则为交集元素
疑问array_intersect_uassoc
答: 使用自定义函数接收的键值比较. 系统函数 strcasecmp 会比较键和值, 键不区分大小写, 值会区分大小. 该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意和 array_intersect() 不同的是(array_intersect_uassoc)键名也用于比较 v2ex-讨论
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
// print_r(array_intersect_uassoc($array1, $array2, "strcasecmp")); // "a" => "green" 为什么不输出?
function myfunction($a,$b)
{
echo $a .'#'. $b . "\n";
if ($a===$b)
{
return 0;
}
return ($a>$b)?1:-1;
}
$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("a"=>"red","b"=>"green","e"=>"blue");
$result=array_intersect_uassoc($array1,$array2,"myfunction"); // "a" => "green" 和 "a" => "GREEN" 为什么没有比较? 这个不是应该输出是 "a" => "green" ?
print_r($result);
// $a = 'a';
// $b = 'a';
// $c = strcasecmp($a, $b);
// var_dump($c);