技术&日志

五个PHP数组#4

  • 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);

相关资料

PHP数组
数组练习代码及docker环境

发表评论